我之前曾经问过如何在运行 wireguard 服务并使用 ufw 和 iptables 作为管理的 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
答案1
从您之前的 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
区域的firewalld配置应用于所有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