- 把
all_node.yaml
複製到 input 資料夾 - 把
generate_config_func.py
複製到 input 資料夾 - 修改
input/all_node.yaml
- 執行
python3 generate_config.py
- 本專案不會對電腦系統做出任何變更。只是生成一大堆 wireguard 設定檔,自己部屬去對應節點自己執行
defaults: 預設值,這個數值會套用到所有節點上,除非在底下改寫
- port_base: 18000 分配外部端口的起始。 18000 18001 18002 這樣分配下去
- port_base_i: 36000 分配內部端口的起始。 36000 36001 36002 ...
- server_perf: 100 雙方都有公網IP的時候,成為server的傾向。數值大的成為server
- tunnel:
- -1: wg 和目標建立的隧道類型。 -1代表所有目標
內部端口: wg_udp2raw就需分配一個內部端口,讓wg和udp2raw連線。此端口無須暴露在外網,不用占去寶貴的port forward名額
外部端口: udp2raw和對面udp2raw連線的端口。此端口需要被port forward
tunnel則是指定節點之間如何互聯。
?-所有人
: 這個是在default裡面的值
,意思是所有人-所有人
使用wg互聯
紅色: 日本-美國
之間使用openvpn
互聯
黃色: 德國-南京
之間不互聯
綠色: 南京-"-1"
,也就是南京-所有人
所有人使用 wg_udp2raw
方式互聯
此時發生衝突, 1->12 使用wg
, 12->1 使用wg_udp2raw
。就會使用優先權高的wg_udp2raw
優先權定義在 generate_config_func.py
裡面,擺在越上面越優先
整體來說就是 美國-日本
用openvpn,南京-其他人
(跨GFW)用wg_udp2raw,德國-南京
不連,剩下的使用wg互聯
wg是點對點,沒有這個問題,但是openvpn/udp2raw都要一邊做server,一邊做client。
如果其中一邊是NAT,那就一定是另一邊做server。如果兩邊都是NAT,就不會建立連線
但如果兩邊都不是NAT,則由 server_perf 數值高的做server ,另一邊做client
- udp2raw server不支援域名,必須使用IP
- gre tunnel兩邊都必須使用IP,不能使用域名
endpoint裡面有 -4
和 -6
,可以自訂義增加別的,或是只使用一個。相同AF之間會互相建立。
以我的例子來說,因為ipv4/ipv6延遲可能不一樣,所以節點間同時建立 ipv4 和 ipv6 連線,由babeld挑選延遲低的走
見 Output章節
生成的結果會放在output資料夾,用name區分每個節點的設定檔。
用github/gitee或是什麼方法同步到自己的節點上就可以了
裡面有3個重要的檔案
裡面是建立tunnel的指令。請自行加入開機自啟動
以及igp_tunnels資料夾,包含了建立tunnel所需的設定檔。公鑰/私鑰/預共享金鑰都會自動生成
還有最後一行的啟動babeld的指令,執行前請先確認自己的babeld是關閉的
babeld -D -I /var/run/babeld.pid -S /var/lib/babeld/state -c babeld.conf
第一行關閉babeld,然後刪除自己建立的tunnel
用來一鍵關閉+刪除本腳本建立的tunnel
還記得剛剛的 DDNS=True ,我說見 Output章節
嗎,這個就是更新wg endpoint的腳本。
被標記成DDNS=True的節點,會出現在update.sh裡面。
內容是重新解析域名,指定到wg接口上。 自己把它放在crontab
就可以了
隧道具體的建立方式,在這邊定義。我目前已經完成 None, "wg" , "wg_udp2raw" , "gre"
"openvpn"則尚未完成
get_gre / get_wg_udp2raw / get_wg / get_openvpn 四個function會回傳具體的設定檔,up/down腳本
返回值是 server 和 client 的設定檔,有 confs
up
down
三個部分
可以去 test_func.ipynb
測試
cd ~
apt install -y git babeld wireguard-tools python3-pip net-tools libc-bin gawk ntp
systemctl enable ntp
systemctl start ntp
pip3 install -r requirement.txt
wget https://github.com/wangyu-/udp2raw/releases/download/20200818.0/udp2raw_binaries.tar.gz
tar -xvzf udp2raw_binaries.tar.gz -C udp2raw
mv udp2raw/udp2raw_amd64 /usr/bin/udp2raw