Wireguard 的 Firewalld 转发功能

Wireguard 的 Firewalld 转发功能

我之前曾经问过如何在运行 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

并绑定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

相关内容