WireGuard 是什麼
Fast, modern, secure VPN tunnel
是一套 VPN 服務,主打比 IPSec、OpenVPN 更快、安全
Linux 需要 Kernel 大於 3.10 以上才能跑 (之後 5.6 就內鍵了)
Windows、MAC、手機 APP 都有支援
架構
Server 端、Client 端都是 CentOS 7 環境
Server 端 +--------------------------------+ | public ip 10.10.10.137 eth0 | | private ip 172.16.33.1/24 wg0 | +--------------------------------+ ^ | + Client 端 +--------------------------------+ | public ip 10.10.10.138 eth0 | | private ip 172.16.33.2/24 wg0 | +--------------------------------+
Server 端
安裝套件
yum install epel-release https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm -y yum install yum-plugin-elrepo -y yum install kmod-wireguard wireguard-tools -y
產生 key
mkdir /etc/wireguard cd /etc/wireguard wg genkey | tee private.key | wg pubkey > public.key
這兩個 private.key、public.key 內容是會餵給 Server 端 、Client 端的 wireguard 設定檔
設定檔
檔名取成是一個網卡的名稱
vi /etc/wireguard/wg0.conf
[Interface] Address = 172.16.33.1/24 # server 的 private ip (不是 eth0 的) ListenPort = 51820 # server listen udp port PrivateKey = 0CL7xdjzVkDBoXHRIPdNbMVJJ94GwBcW17c3ZLo48nU= # server 的 private.key # 可以讓服務啟動時作什麼動作,這裡就直接給一個 NAT 模式的指令,因為 Client 端是要透過 Server 端上網的 PostUp = echo 1 > /proc/sys/net/ipv4/ip_forward; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # 可以讓服務停止時作什麼動作 PostDown = echo 0 > /proc/sys/net/ipv4/ip_forward; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE [Peer] PublicKey = GYBRqjx6ytr4pPyxa8SFDhOrGVM3IPaPZEsFs4v3ck4= # client 的 public.key AllowedIPs = 172.16.33.2/32 # 給 client 的 private ip (一定要 /32),多 client 就要多個 [Peer]
啟動 wireguard
wg-quick up wg0
或
systemctl start wg-quick@wg0 systemctl status wg-quick@wg0
停掉 wireguard
wg-quick down wg0
開放防火牆
iptables -I INPUT -p udp --dport 51820 -j ACCEPT
開放 NAT 模式
(已作在設定檔裡了)
此時就會綁定一張 wg0 網卡 (Client 端也會)
Client 端
安裝套件
(同 Server 端)
產生 key
(同 Server 端)
設定檔
vi /etc/wireguard/wg0.conf
[Interface] Address = 172.16.33.2/24 # client 的 private ip (不是 eth0 的) PrivateKey = 2J4qIVg1PPpcXijqyT9kB30lyYkP3WpBqbveC4YMJWU= # client 的 private.key [Peer] PublicKey = 8Qc3B/HB7IKBfKOpFTEODawBVAfszskPXuFxaeaZ7wA= # 取 server 的 public.key AllowedIPs = 0.0.0.0/0 # 允許誰才透過 wg0 出去,這裡代表全部, # 假如設置 192.168.33.0/24 就是找 192.168.33.0 網段的就透過 wg0 出去, # 其它就是 eth0 出去, # 如果一開始是拿同網段的在測試,Clinet 端一啟動就斷線了,就是這原因 Endpoint = 10.10.10.137:51820 # server 的 public ip (eth0 上的) PersistentKeepalive = 15 # 保持連線 (秒)
啟動 wireguard
(同 Server 端)
最後
這樣子就可以互 ping 172.16.33.0/24 網段了
Client 端上網也都透過 Server 端 (也可以不用,上面有說明)
其它
如果手機 APP 要用,就用 QR Code 比較方便簡單
另製作一份 key、conf 檔 (參照 Client 端的),再用 qrencode 套件生成條碼
yum install qrencode qrencode -t ansiutf8 < /etc/wireguard/app.conf
留言