帶有 Wireguard 的防火牆轉發功能
我之前問過如何在執行帶有 ufw 和 iptables 作為管理的 wireguard 服務的 VPS 上轉發埠。
我不得不這樣做:
(56000是我隨機選擇的埠)(10.66.66.2是wireguard的內部ip)
ufw route allow proto tcp to 10.66.66.2 port 56000
然後我會這樣做以實際使用 iptables 轉發埠:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 56000 -j DNAT --to-destination 10.66.66.2
有沒有辦法讓我實現這一目標
firewalld
?所以我不必將轉發分成兩個地方?偽裝在這裡使用/是否需要?因為我不知道它的作用,也不知道它的用途。
VPS wireguard wg0 conf 供參考:
Address = 10.66.66.1/24,fd42:42:42::1/64 ListenPort = 49503 PrivateKey = *** [Peer] PublicKey = *** PresharedKey = *** AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128
從您之前的 UFW 問題來看,聽起來您將 WireGuard 用於兩個目的?:1)將流量從您的 VPS 的 WireGuard 客戶端轉發到 Internet,以及 2)將一些公共埠從您的 VPS 轉發回 WireGuard 客戶端. 1)需要偽裝(又名 SNAT),2)需要埠轉發(又名 DNAT)。
使用 firewalld 進行設置的最簡單方法是將 VPS 的公共乙太網介面(
eth0
在您的情況下)綁定到 firewalld 的預定義external
區域,並將 VPS 的 WireGuard 介面(wg0
在您的情況下)綁定到 firewalld 的預定義internal
區域。該external
區域預先配置了啟用偽裝;並且這兩個區域也預先配置為接受 SSH 和其他一些服務。首先在區域上打開您的 VPS 的 WireGuard 偵聽埠(
49503
在您的情況下)external
:$ sudo firewall-cmd --zone=external --add-port=49503/udp
56000
並將區域上的埠 TCP 轉發external
到同一埠10.66.66.2
:$ sudo firewall-cmd --zone=external --add-forward-port='port=56000:proto=tcp:toaddr=10.66.66.2'
然後綁定
eth0
到external
區域(將防火牆的external
區域配置應用於所有eth0
連接):$ sudo firewall-cmd --zone=external --add-interface=eth0
並綁定
wg0
到internal
區域:$ sudo firewall-cmd --zone=internal --add-interface=wg0
檢查您的活動區域:
$ sudo firewall-cmd --get-active-zones external interfaces: eth0 internal interfaces: wg0
並檢查您的
external
區域的配置:$ sudo firewall-cmd --info-zone=external external (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: ssh ports: 49503/udp protocols: masquerade: yes forward-ports: port=56000:proto=tcp:toaddr=10.66.66.2 source-ports: icmp-blocks: rich rules:
如果一切正常,請保存您目前的 firewalld 設置:
$ sudo firewall-cmd --runtime-to-permanent