安裝derp(笨蛋伺服器),讓 tailscale 網路更安全順暢

前一篇文章 Tailscale+Headscale 自架VPN全紀錄 讓 tailscale node 能夠透過 headscale 管控, 互相連線, 但是有些 tailscale node 隱藏在區域網路中, 無法互相p2p(peer to peer)直接連線, 這時候就需要 derp 伺服器提供轉接, derp 伺服器預設有很多, 若需要效率更好的,更無資安疑慮的, 可以自架.

我想也因為 derp 只做資料轉接, 不會偷看內容, 因此才會叫這個名字 DERP(笨蛋) XD.
derp 伺服器有很多, 可以參考tailscale官網 .

此外若derp轉接延遲時間太長, 就需要自架 , 可參考 https://tailscale.com/kb/1118/custom-derp-servers/

本文提供CentOS 7 安裝derp過程

  1. 安裝go 1.20以上
  2. 安裝derper程式
  3. 執行指令
  4. 讓headscale納入derper伺服器
  • 安裝 go 1.20
wget https://golang.google.cn/dl/go1.20.linux-amd64.tar.gz
 
tar -C /usr/local -xzf go1.20.linux-amd64.tar.gz 
 
export GOROOT=/usr/local/go
export GOPATH=/usr/local/gopath
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT/bin
export PATH=$PATH:$GOPATH/bin
 
source /etc/profile

#安裝完畢, 執行
 /usr/local/go/bin/go version
  • 安裝 derper
go install tailscale.com/cmd/derper@main
#安裝完畢, 應該會在
/usr/local/gopath/bin/derper
  • 啟動derp

先搞定letscrypt證書, 因為我選擇derp手動設定, 所以文件要對應好.

ln -s /etc/letsencrypt/live/derp.test.com/cert.pem /etc/letsencrypt/live/derp.test.com/derp.test.com.crt

ln -s /etc/letsencrypt/live/derp.test.com/privkey.pem /etc/letsencrypt/live/derp.test.com/derp.test.com.key

執行指令

#若要防止別人使用, 需先把derp server主機也加入tailscale 端點, 才可使用 --verify-clients 這個參數
/usr/local/gopath/bin/derper --hostname=derp.test.com --verify-clients -a=:8445 -http-port=-1 -certdir=/etc/letsencrypt/live/derp.test.com  -certmode=manual -stun 
#這樣就可以輸入 https://derp.test.com:8445 測試是否正常
  • 讓headscale納入derper伺服器
    修改headscale設定, 打開headscale yaml 設定檔案, 找到 derp , 將https:/derp.test.com:8445 加上去, 並且新增derp.yaml檔案, 重開headscale就可以了

新增 derp.yaml

重開 headscale 就可以,進行測試了

# 隨便找一個tailscale端點
tailscale netcheck
# 然後  tailscale ping <另一個端點的ip (100.64....)>
tailscale ping 100.64.0.2

在台灣, 我自己覺得架設derp除非有資安考量, 否則不見得需要.

Tailscale+Headscale 自架VPN全紀錄

Wireguard 與最近大熱門的ChatGPT一樣, 是邪惡的存在, 以往公司網管還能勉強管控員工自架VPN, P2P, 與遠端連線, 雖說辛苦,但員工相關網路行為終究掌握在手中.

現在不得了了, 使用wireguard技術的 Tailscale 已攔不住, 隨隨便便就能翻牆, 穿透內網. 我們網管就像是, 治水用阻擋的方式不再可行 , 該是要全面開放, 採用全面零信任的思維+員工契約進行資通安全的管控.

“新暗網時代” , 用wireguard, 能讓一個小群體, 自成一個暗網, 也可自行打造VPN暗黑王國, 市面上網紅推薦的乾爹乾爸VPN, 未來亦將勢微.

本文著重在翻牆, 與簽入公司內部網路, 若用來做site to site請參考以下 tailscale 建議, 直接用Wireguard 比較好.

Using WireGuard directly offers better performance than using Tailscale. Tailscale does more than WireGuard, so that will always be true. We aim to minimize that gap, and Tailscale generally offers good bandwidth and excellent latency, particularly compared to non-WireGuard VPNs.

環境

  1. Headscale
    headscale是開源軟體, 使用docker自行架設後, 可對安裝tailscale的端點進行權限控管, 也是整個VPN當中, 最主要的控制伺服器(control server).
  2. 公司內部架設 tailscale 端點
    Linux tailscale安裝了N次, 推薦安裝ubuntu.
    讓用戶端進行vpn連線, 可存取內網, 或是當作跳板,進行翻牆
  3. PC 用戶端
    windows 10/11 用戶端.
    安裝tailscale windows client , 透過headscale註冊, 即可串接到公司tailscale端點, 存取公司內網工作.
  4. Android
    搜尋tailscale並且安裝後, 修改server url , 導到自架的headscale server ,登入後, 透過公司架設之tailscale端點, 進行翻牆.
    **目前測試,使用台灣之星, 翻牆方面不是很穩定, 但是連到公司內網穩定**
  5. iphone
    安裝tailscale後, 不可修改server, 因此無法連接自架headscale server, 所以GG.

架設Headscale+UI

  • Headscale伺服器, 須提供http對外網址, 以便讓端點登入
    ex: http://headscale.test.com:8081 或是 https://headscale.test.com
    可用proxy reverse反向代理(但我失敗了, 很像是headscale的bug, 因此https我先pass, 改用 http )
    後來發現是apache httpd 版本太舊(2.4.6),不支援 upgrade=any 語法 , 只要讓proxy server 改成2.4.47以上就好了
  • 下載headscale yaml設定檔案
  • docker安裝(本範例vm為centos 7+docker)
    請務必用0.21版, 0.20有bug不能刪除路由表
    紅色請自行依照環境修改
# 存放headscale設定檔按
mkdir -p /root/headscale/config
mkdir -p /root/headscale/data

# 虛擬網路
docker network create reverseproxy-nw

vi /root/headscale/docker-compose.yml
###############################################################################
version: '3.5'
services:
  headscale:
    image: headscale/headscale:0.21
    container_name: headscale
    volumes:
      - '~/config:/etc/headscale'
      - '~/data:/var/lib/headscale'
    ports:
      - 8081:8080
      - 50443:50443
    command: headscale serve
    restart: unless-stopped
    networks:
      reverseproxy-nw:
  headscale-ui:
    image: ghcr.io/gurucomputing/headscale-ui:latest
    restart: unless-stopped
    container_name: headscale-ui
    ports:
      - 9443:443
    networks:
      reverseproxy-nw:
networks:
  reverseproxy-nw:
    external: true
volumes:
  data:
    driver: local
  config:
    driver: local
###############################################################################
  • 下載headscale設定檔
wget https://github.com/juanfont/headscale/raw/main/config-example.yaml -O /root/headscale/config/config.yaml
# 下載完畢, 修改yaml檔案中以下參數
server_url: https://headscale.test.com
listen_addr: 0.0.0.0:8080
base_domain: test.com

#是否改寫用戶端dns,請自行測試, 依照需求決定
override_local_dns: true

# 提供(expose)給用戶端dns
  nameservers:
    - 1.1.1.1
    - 8.8.4.4
# 公司內部專用網址,可分別參考不同dns
  restricted_nameservers:
     test.com:
       - 192.168.1.1
# 停用magic dns
magic_dns: false

#其他如derp, 有機會再另外寫文章
  • 啟用container
cd /root/headscale
docker-compose up -d
  • 設定apache httpd proxy server (版本務必2.4.47以上)
<VirtualHost *:443>
  ServerName headscale.test.com

  ErrorLog /var/log/httpd/ssl_error_log
  TransferLog /var/log/httpd/ssl_access_log

  SSLEngine On
  SSLCertificateFile /etc/letsencrypt/live/headscale.test.com/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/headscale.test.com/privkey.pem
  SSLCACertificateFile /etc/letsencrypt//live/headscale.test.com/fullchain.pem

  SSLProxyEngine On
  ProxyPreserveHost On
  Header add Access-Control-Allow-Origin "test.com";
  SSLProxyCheckPeerName  off
  ProxyPass /web https://localhost:9443/web
  ProxyPassReverse /web https://localhost:9443/web
  ProxyPass / http://localhost:8081/ upgrade=any
  ProxyPassReverse / http://localhost:8081/ upgrade=any
</VirtualHost>
  • 等個1分鐘, 測試
https://headscale.test.com/windows
  • 下指令產生apikey
 docker exec -it headscale headscale apikey  create
  • 將headscale 伺服器網址, 以及apiky , 輸入到 UI 介面
    https://headscale.test.com/web
    請注意,這網址沒有帳號驗證就能用, 要考慮加上帳號密碼認證, 或是限定ip連線
  • 可以開始到UI介面進行管理了
  • 建立使用者,並且提供authkey, 讓公司架設的tailscale 端點使用
# 建立使用者
# docker exec headscale headscale users create <使用者>
docker exec headscale headscale users create hlmtvpn
# 產生authkey, 讓tailscale端點使用
docker exec headscale  headscale --user hlmtvpn preauthkeys create --reusable --expiration 24h
  • 相關指令
1. 列出 tailscale 端點
docker exec headscale headscale node list

2. 刪除 tailscale 端點
docker exec headscale headscale node delete -i <ID>
docker exec headscale headscale node delete -i 1
3. 列出 tailsacle 路由
docker exec headscale headscale route list
4. 啟用路由功能
docker exec headscale headscale route enable -r <ID>
5. 刪除路由表
docker exec headscale headscale route delete -r <ID> --force

公司架設tailscale 端點

  • 建議安裝ubuntu
    之前一直習慣用CentOS, 或是RockyLinux , 但這次有點踢到鐵板, site to site vpn一直不成功, 改由ubuntu就成功了.
  • 請先決定此端點提供site to site 或是 nat
    1. 若是與外地子公司site to site連線, 參數就要加上–snat-subnet-routes=false , 但無法讓外面裝置當作跳板翻牆.
    2. 若是讓外面設備簽入使用, 不需要反向回連, 就使用 –snat-subnet-routes=true (這是預設值), 若外面裝置要用tiptop gp 5.x 連到公司, 則不能使用此設定.

    結論: 要翻牆, 就要設定成true, 要使用tiptop erp , 或是與子公司互相連線就要設定成 false
  • 決定端點當作翻牆或是site to site後, 複製好上一步驟 headscale 伺服器所產生出來的authkey
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/jammy.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null

curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/jammy.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list

sudo apt-get update
sudo apt-get install tailscale
  • 啟用/設定tailscale端點
# http://headscale.test.com:8080是 headscale對外的URL
# d72e7351e24bbd21ecc99bbf5004c3e1f7cffa0631f8f5d5 是 authkey

# nat , 翻牆
tailscale up --reset --accept-routes --advertise-exit-node --snat-subnet-routes=true --accept-dns=false --advertise-routes=192.168.1.0/24 --login-server=https://headscale.test.com  --authkey=d72e7351e24bbd21ecc99bbf5004c3e1f7cffa0631f8f5d5 

# site to site , 不翻牆
tailscale up --reset --accept-routes --snat-subnet-routes=false --accept-dns=false --advertise-routes=192.168.1.0/24 --login-server=https://headscale.hlmt.com.tw  --authkey=d72e7351e24bbd21ecc99bbf5004c3e1f7cffa0631f8f5d5 

# 主機為vp, 不需要對外ip, 只要內網ip, 可上網, 要加上forward功能
# https://tailscale.com/kb/1019/subnets/
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p /etc/sysctl.conf
  • 回到headscale,啟用路由
#列出路由表
docker exec headscale headscale route list
#啟用路由
 docker exec headscale headscale route enable -r <ID>

公司主要路由(router), 須額外設定靜態路由

若需要做到site to site

PC 用戶端安裝tailscale端點(可翻牆)

  • 先決條件: 公司tailscale端點已設定成nat(當作翻牆用)
  • 執行指令登入到headscale
    打開dos, 或是powershell (希望不用做這動作, 不然麻瓜會生氣)
    ** powershell or cmd run as administrator
cd C:\Program Files\Tailscale
tailscale login --login-server https://headscale.test.com --exit-node=<headscale ip 可為headscale server local ip> --exit-node-allow-lan-access=true

此時網頁會出現一串指令, 請將該node key 給管理人員註冊
**這邊要注意的是網址指令裡面的 USERNAME , 是一開始 headscale 新增的使用者帳號. 

# 管理人員到headscale主機註冊
docker exec headscale  headscale nodes register --user hlmtvpn --key nodekey:32a95789aa71c2dc7ccfa43a16cf1cff575e318c0a67117370ec9c847ff76828

若管理人員註冊完成, PC上面的tailscale會自動登入, 代表註冊成功, 此時可以選擇變身成公司tailscale 端點(如下圖 william-standard-pc-i440fx-piix-1996) , 就可以以公司ip的名義上網翻牆, 當然也可也存取公司內網(tiptop erp不行).

Android

  • play商店
    搜尋 tailscale後安裝並且執行, 執行後要連續按右上三個點, 連按四次, 會出現隱藏的Change server選項, 然後輸入 https://headscale.test.com:8081
  • 設定完headscale server 網址, 回到首頁, 點選 Sign in with other , 此時會出現網址顯示指令,內含一串node key , 如同上個步驟, 將auth key給網管人員註冊, 經網管通知註冊完畢, 即可登入使用.
    **這邊要注意的是網址指令裡面的 USERNAME , 指的是一開始我們在 headscale 伺服器中新增的使用者帳號.
  • 啟用可以翻牆的VPN惹, 要選擇exit node為可翻牆的主機
    實際測試,我自己手機(android 13)翻牆會秀逗不是很穩定, 有時候等1,2分鐘, 有時候秒連,有時候就GG

OPNsense 安裝 wireguard site to site

原本想簡單用linux安裝wireguard 來達到site to site vpn , 無奈搞不定 , 只能依靠OPNsense幫忙了.

OPNsense 幾乎與pfSense 齊名, 是款開源免費,以及補漏洞快速的防火牆軟體, 評估後,我用OPNsense有三個理由:

  1. 介面簡單,更直覺, 滿像防火牆該有的樣子
  2. 哥是來找支援wireguard的系統, OPNsen阿莎力說有. 而pfSense一下子說有, 一下子又沒有,哥就不愛用了.
  3. 真. wireguard site to site
  4. windows簽入vpn, 可以一次連線多個site , 非常方便, 至少給麻瓜用, 不用挑戰麻瓜的邏輯思考, 一鍵多處簽入

目前還需要wireguard改善的:

  • 動態簽入vpn,
    目前用wireguard windows連線, tunnel ip居然無法自動取得, 那腳本就不能一份多用

 

情境 site to site vpn

Site A 
對外IP: 192.168.1.1  ,  udp port: 65536
內網:  10.192.130.15/24
Wireguard Tunnel ip :  10.1.0.1/24 

Site B
對外IP: 192.168.2.1  ,  udp port: 65536
內網:  191.1.0.0/24
Wireguard Tunnel ip :  10.1.0.2/24

安裝步驟:

  • 安裝外掛程式
    登入OPNsense , System -> Firmware -> Plugins 選擇安裝 os-wireguard-go
安裝完畢,網頁重新整理, 會出現WireGuard選項
  • 啟用WireGuard VPN

 

  • 新增Local
    設定 Name , Listen Port , tunnel ip . 裡面的 public key , private key 先不用輸入,等新增後會自動出現
按下”+” 準備新增
按下 “Save” 新增Local完畢
public key 與private key會自動產生, public key 需要複製下來,提供給對方服務器使用

  

  • 新增Endpoints
    這部分的資訊為對方服務器資訊, 以我們是Site A來說, 要輸入 Site B相關資訊
按下”+”準備新增

 

  • 綁定Local與Endpoints
    我們回過頭來修改Local, 設定其與Endpoints綁定

 

  • 設定防火牆, 讓對方能存取我們的udp port

 

  • 設定對方內網網段,與tunnel 網段(可以跟多個site互聯) , 讓內網與tunnel ip 能通過wireguard 介面, 進而互相溝通

 

另外一邊服務器, 請務必也用OPNsense , 不要像我這樣走冤枉路, 一邊OPNsense, 一邊Linux, 或是docker, 作法同上步驟, 資料記得不可一模一樣, 每個服務器ip, udp port , public key, 都不一樣

 

完成後, 可以到 lobby 查看, Lobby->Dashboard->右下角wireguard-go

 

ps.
1. 上面有一步驟可以輸入preshared key (也可以不輸入) , 若要輸入, 需登入OPNsense , 輸入 wg genpsk 即可產生, 這個key要放到所有相連結的服務器, Endpoints裡面
2. 參考資料
https://www.thomas-krenn.com/en/wiki/OPNsense_WireGuard_VPN_Site-to-Site_configuration

wireguard 初體驗

我打算用OPNsense取代目前老舊的硬體防火牆(Fortigate 80C) , 後來透過OPNsense 外掛, 試了suricata, AdGuard Home, tailcale , wireguard , 總共花了我2周的時間, 對於VPN, site to site , point to site 也都玩了一輪.

其中對於VPN心得:

  1. Wireguard 網路品質比OpenVPN好一些
  2. site to site vpn , 以及 point to site vpn
    請用OPNsense , 作法請參考 https://www.thomas-krenn.com/en/wiki/OPNsense_WireGuard_VPN_Site-to-Site_configuration
  3. wireguard 基本上綁定一個udp port , 與openvpn一樣都只能靠這個udp port做事, 很容易中國被擋下來
  4. 要規避中國防火牆, 請用tailscale + headscale + udp2raw
  5. tailscale安裝完畢,預設使用者管控機制滿好用的,但是要付費才能商用, 若不花錢, 請將使用者管控改成 headscale , headscale可用docker安裝, 然後讓tailscale login server改成headscale即可.
  6. tailscale 做site to site 只能以NAT方式完成, 這會有問題, 以鼎新tiptop GP 5.1來說就無法回撥source ip 的6400 port ,算是假的site to site vpn , 就算官方宣稱加上 –snat-subnet-routes=false 可以辦到, 但我怎麼試都失敗, 網路上大部分也都不在意,看來tailscale使用群更專注在翻牆功能.

wireguard 設定檔簡單解釋如下, 檔案為/etc/wireguard/wg0.conf, 該設定檔可形成 site to site , 但我在Linux設定一直失敗, 只能用NAT方式,最後發現OPNsense才能做到真正的site to site 功能, 太怪了!

[Interface]

# Site A
# private key 
PrivateKey = CG0svjlK7NdZ3U0MdYQzBHx7adDi1p2UlhPFXdH4HHw=
# Site A Tunnel IP
Address = 10.1.0.1/32
ListenPort = 51820

[Peer]
# Site B public key ,  tunnel ip 10.1.0.2/32
PublicKey = Jkdn621+amuCV8Wj7YQLMydtE9GO5kpq+oZdK/17XAY=
# 允許Site B內網, 以及Site B的tunnel ip
AllowedIPs = 10.1.0.2/32,10.176.5.0/24
Endpoint = <Site B 對外ip>:51820
PersistentKeepalive = 25

[Peer]
# Site C public key , tunnel ip 10.1.0.3/32
PublicKey = VaVaSY6SkizEhexj9vSTkzKgaIo5MwMnulu6I/D+iAI=
# 允許Site C內網, 以及Site C的tunnel ip
AllowedIPs = 10.1.0.3/32,192.1.0.0/22
Endpoint = <Site B 對外ip>:51820
PersistentKeepalive = 25

pfSense的OpenVPN改用google authenticator

前陣子公司強化vpn登入方式, 密碼改用谷歌驗證器(google authenticator)驗證密碼,
原本覺得pfSense上設定實在太簡單了, 就懶得記錄下來, 不過想想還是截一下圖,做個紀錄.

  • 安裝FreeRADIUS
System > Package Manager > Available Packages 
搜尋FreeRADIUS並且安裝
  • 新增interface 127.0.0.1 監聽1812 , 1813
    RADIUS兩功能: Autentication(port 1812)與Accouting(port 1813)
    1812:Access-Request (驗證用)
    1813:Counting-Request (Accouting 記錄使用者連線期間)
Services > FreeRADIUS > Interfaces > Add
  • 新增 NAS/Client
Services > FreeRADIUS > NAS/Clients > Add
  • 新增pfsense 認證server
System > User Manager > Authentication Servers > Add
  • 設定原本OpenVPN改用FreeRADIUS認證
VPN > OpenVPN > Servers > Edit
  • 設定大功告成,
    接下來只要新增使用者, 並且產生QR Code , 讓使用者透過下載的google authenticator產生的的密碼幾可登入vpn
Services > FreeRADIUS > Users > Add

以下為官方寫的文件非常詳細, 建議參考官方的

https://devopstales.github.io/linux/pfsense-2fa/

pfsense的openvpn用戶端設定檔案如何移除

pfsense設定openvpn非常方便, 也有package能協助匯出windows用戶端安裝程式 , 再給使用者無腦安裝, 可以省下IT很多時間.

但是若使用者想要刪除設定檔案, 打開openvpn gui預設的資料夾,卻找不到設定檔案, 就無法刪除設定檔案.

查了一下設定檔案profile的位置, 總共有兩個地方.
1. openvpn gui預設的
%USERPROFILE%/OpenVPN/config

2.program file裡面
%ProgramFiles%/OpenVPN/config

pfsense用戶端安裝的時候, 設定檔案卻放在 ProgramFiles 裡面, 超怪的, 就算是新版pfsense 2.5.1 也跟2.4.5p1一樣沒變, 此時只要到正確的目錄, 刪除相關檔案,重啟常駐的openvpn gui 就可以了

pfsense設定openvpn單點連線(remote access)注意事項

安裝方式可參考 https://docs.netgate.com/pfsense/en/latest/vpn/openvpn/openvpn-remote-access-server.html

安裝時注意事項如下:

1. servers 設定需要注意的
   server mode : remote access(ssl/tls+User Auth)
   local port : 預設1194 (建議不要用1194,容易被擋)
   tunnel network:  10.0.8.0/24 (可自己調整,但遠端的路由要記得設定走回來,不然會迷路)
   IPv4 Local network(s): x.x.x.x/24 (serve本身內部網段)
   Dynamic IP: 打勾
   DNS server enable: 打勾(若要翻牆的話)
   DNS server1, DNS server2 (若要翻牆就要設定)
   custom options: redirect-gateway def1(若要翻牆就要設定)
2. 請使用openvpn wizard幫我們自動設定remote access, 會方便許多
   在System->Certificate Manager>CAs會出現FreeRADIUS CA
3. System->User Manager
   新增使用者後, 還要編輯該使用者,新增一個User Certificates
   新增時可在Common Name輸入server對外網址
4. System->Package Manager->available packages
   安裝協助匯出憑證的外掛程式
   openvpn-client-export
   安裝後vpn->openvpn->client export 就能匯出使用者憑證
5. (2021/05/23)新版2.5.x 設定的時候, 要注意與2.4.x版本的壓縮設定不太一樣, 若壓縮的方式沒搞定(我是選擇lzo lagacy, 或是no compress , retain compression package ...) 不然vpn會失敗的
6. remote server那邊的local network router記得要把丟往tunnel network的封包, 設定由pfsense lan ip走過去哦, 例如往 tunnel 10.0.8.0/24 gateway 為 10.192.130.213(pfsense lan ip)

pfsense設定OpenVPN (site to site一邊固定ip即可)

1.下載 pfsense 軟體防火牆套件
  https://www.pfsense.org/
2.安裝pfsense(server端)(假設內部網段是10.192.130.0/24)
  至少要有兩個網卡,一個要有固定ip, 另一個是內部網路(假設是10.192.130.212)
  2.1 安裝很簡單, 重點在於搞定兩個網卡ip,搞定後就能用使用瀏覽器,經由內部網路ip, 連上pfsense
  2.2 連上pfsense後, 取消硬體checksum
      System->Advanced->Networking
      Hardware Checksum offloading選項打勾(這部分我浪費三天三夜, 若沒打勾會嚴重影響效能)
  2.3 連上pfsense後, 啟用CPU硬體加密功能
      System->Advanced->Miscellaneous
      Cryptographic Hardware 選擇AES-NI CPU-based Acceleration
      這部分比較特別,若pfsense裝在promox ve上, vm要記得開啟AES-NI功能, esxi好像預設就開啟
      ps. 這時候建議pfsense重開一下
  2.4 安裝openvpn(server)
      VPN->OpenVPN->Servers
      新增OpenVPN Servers , 需要輸入的地方如下,其他都是預設
      (1) Server Mode 選 Peer to Peer(Shared Key)
      (2) local port 預設是1194請改成其他減少被擋或被駭的機率
      (3) Hardware Crypto 任選一種硬體加密(若可以選的話)
      (4) IPv4 Tunnel Network 輸入172.26.0.0/24
      (5) IPv4 Remote network(s) 輸入client端的內部網路 , 如192.1.0.0/24
      (6) Save
      (7) 重新看剛剛的設定,複製preshared key(Save之後才會產生),要複製到pfsense client端使用
  2.5 Firewall -> Rules 到 WAN 新增 any source 的規則, 到OpenVPN 也新增 any source的規則

3.安裝pfsense(client端)(假設內部網段是192.1.0.0/24)
  至少要有兩個網卡,兩個都是內部網路,同網段也ok
  3.1 安裝很簡單, 重點在於搞定兩個網卡ip,這兩個網卡ip可以同一個網段, 一個當WAN,一個當LAN(假設是192.1.0.3).
      搞定後就能用使用瀏覽器,經由內部網路ip, 連上pfsense
  3.2 同步驟2.2
  3.3 同步驟3.2
      ps. 這時候建議pfsense重開一下
  3.4 安裝openvpn(client)
      VPN->OpenVPN->Clients
      新增OpenVPN Clients , 需要輸入的地方如下,其他都是預設
      (1) Server Mode 選 Peer to Peer(Shared Key)
      (2) Interface 選 any
      (3) Server host or address 輸入server端對外的ip
      (4) server port 輸入server端設定port
      (5) Shared Key 請輸入server端複製的Shared Key
      (6) Hardware Crypto 任選一種硬體加密(若可以選的話)
      (7) IPv4 Tunnel Network 輸入172.26.0.0/24
      (8) IPv4 Remote network(s) 輸入server端內部網路 , 如10.192.130.0/24
      (6) Save
  3.5 Firewall -> Rules 到 WAN 新增 any source 的規則, 到OpenVPN 也新增 any source的規則

4.Status->OpenVPN 查看能不能連線成功
5.pfsense(server)
  新增路由,假設server所在內部網路gateway是10.192.130.1
  請在該gateway上新增目的地192.1.0.0/24,要經由10.192.130.212出去(依照以上例子) 
6.pfsense(client)
  新增路由,假設client所在內部網路gateway是192.1.0.1
  請在該gateway上新增目的地10.192.130.0/24,要經由192.1.0.3(依照以上例子)
—
Pfsense 2.4.5
William 20200422

v2ray初體驗-使用v2-ui初階安裝

安裝v2ray之前,你必須符合以下基本技術基礎

  1. 會安裝CEntOS 7
  2. 懂apache httpd 2.4基本設定
  3. 懂dns, 懂申請let’s Encrypt

你也必須準備以下軟硬體

  1. 安裝好CEntOS7
  2. 有Internet IP
  3. 有網域,並可賦予該系統一個網路名稱

開始安裝

1. 安裝v2ray
到這個神人網站 https://github.com/sprov065/v2-ui/
一鍵安裝
bash <(curl -Ls https://blog.sprov.xyz/v2-ui.sh)

2. 安裝完畢網站預設是 http://ip:65432 預設帳號密碼都是admin , 記得登入修改密碼


3. 以下示範兩種連線, 一種http/2(h2), 另一種透過apache httpd(port 443)代理連到後端websocket
3.1 設定 h2 連線
Server:


client:
v2ray初體驗-使用v2-ui初階安裝



3.2
Server 設定:


Clinet 設定:
websocket , port 用443, 要輸入tls

apache httpd 設定:

ServerName xxx
ErrorLog /var/log/httpd/ssl_error_log1
TransferLog /var/log/httpd/ssl_access_log1

SSLEngine On
SSLProxyEngine On
SSLCertificateFile /etc/letsencrypt/live/xxx/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/xxx/privkey.pem
SSLCACertificateFile /etc/letsencrypt/live/xxx/fullchain.pem
## v2-ui management
RewriteEngine On
ProxyPass / http://localhost:65432/
ProxyPassReverse / http://localhost:65432/
## server
RewriteRule /ray/(.*) ws://localhost:1234/$1 [P,L]
RewriteCond %{HTTP:Upgrade} =websocket [NC]
ProxyPass /ray/ http://localhost:1234/
ProxyPassReverse /ray/ http://localhost:1234/


4. 心得
若是使用3.1 , 使用httpd/2的方式
若是使用3.2可以看起來像是https的存取

5. 額外指令

 v2-ui              - 显示管理菜单 (功能更多)
 v2-ui start        - 启动 v2-ui 面板
 v2-ui stop         - 停止 v2-ui 面板
 v2-ui restart      - 重启 v2-ui 面板
 v2-ui status       - 查看 v2-ui 状态
 v2-ui enable       - 设置 v2-ui 开机自启
 v2-ui disable      - 取消 v2-ui 开机自启
 v2-ui log          - 查看 v2-ui 日志
 v2-ui update       - 更新 v2-ui 面板
 v2-ui install      - 安装 v2-ui 面板
 v2-ui uninstall    - 卸载 v2-ui 面板
1 2