WireGuard 端口转发设置

WireGuard 端口转发设置

我需要帮助解决以下情况:

我在 AWS 上有一个小型实例,它应该接受来自端口 1024:65535 的所有流量并将其发送到我的本地服务器。本地服务器不应通过隧道发送任何流量,而应接收来自云服务器的流量。为了测试这一点,本地服务器在端口 8080 上打开了一个简单的 http 服务器。

但我无法让它正常工作。我知道端口是打开的,因为当使用 ssh 隧道时,它可以完美运行。

这是服务器配置:

[Interface]
Address = 10.200.200.1/24
PrivateKey = <private-server-key>
ListenPort = 51820

PostUp = /usr/sbin/iptables -t nat -A PREROUTING -i ens5 -p tcp --dport 1024:65535 -j DNAT --to-destination 10.200.200.2
PostUp = /usr/sbin/iptables -t nat -A POSTROUTING -o ens5 -p tcp --dport 1024:65535 -j MASQUERADE


[Peer]
PublicKey = <public-client-key>
AllowedIPs = 10.200.200.2/32

这是客户端配置:

[Interface]
Address = 10.200.200.2/32
PrivateKey = <private-client-key>


[Peer]
PublicKey = <public-server-key>
Endpoint = <server-ip>:51820

我甚至没有从服务器上的客户端获得握手,除非我添加

AllowedIPs = 0.0.0.0/0, ::/0

到客户端配置,但其他什么都不起作用。

答案1

针对客户端回复流量进行策略路由可能是最佳方法。请尝试对您的 WireGuard 客户端配置执行此操作(假设您仅转发 IPv4 流量):

[Interface]
Address = 10.200.200.2/24
PrivateKey = <private-client-key>
Table = 123

PreUp = ip rule add from 10.200.200.2 table 123 priority 456
PostDown = ip rule del from 10.200.200.2 table 123 priority 456

[Peer]
PublicKey = <public-server-key>
Endpoint = <server-ip>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

它使用自定义路由表(123)和策略路由规则,确保对最初进入 WireGuard 接口的入站流量的所有回复都将以相同的方式出去 - 而不会影响源自客户端本身的流量(除了到该10.200.200.0/24范围的流量)。

查看从互联网进行 WireGuard 端口转发文章中介绍了一些其他替代选择。


在服务器端,如果客户端从不发起出站连接(仅回复它们),则可以删除服务器的MASQUERADEiptables 规则(除非您出于其他原因使用它)。

而且,通常你不会想转发一切在服务器的临时端口范围内,因为通常您希望允许服务器使用这些端口进行自己的出站连接(例如,下载系统更新)。您最好在服务器的DNATiptables 规则中仅指定客户端实际要侦听的端口(或至少调整它或服务器的net.ipv4.ip_local_port_range内核参数以避免两者之间发生大规模冲突)。

相关内容