Port-Forwarding

帶有 Wireguard 的防火牆轉發功能

  • July 5, 2021

我之前問過如何在執行帶有 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'

然後綁定eth0external區域(將防火牆的external區域配置應用於所有eth0連接):

$ sudo firewall-cmd --zone=external --add-interface=eth0

並綁定wg0internal區域:

$ 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

引用自:https://serverfault.com/questions/1068004