eth0 为服务器的公网网卡,假设 IP 为 1.2.3.4 。
一直以来我对于 wireguard 的用法都是如下这样的:
# 服务器
[Interface]
Address = 10.0.0.1/32
ListenPort = 10000
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
AllowedIPs = 10.0.0.0/24
# 客户端
[Interface]
Address = 10.0.0.2/32
Table = 1
[Peer]
AllowedIPs = 10.0.0.0/24, 0.0.0.0/0
Endpoint = 1.2.3.4:10000
这样可以实现客户端通过 wireguard 对外请求:
curl --interface wg0 https://ifconfig.me
现在想要在维持当前功能的前提下,只通过在服务器修改,实现将服务器的 8888 端口通过 wireguard 转发到客户端上,并且在客户端看来,来源 IP 为 wireguard Endpoint 的 IP ,也就是 10.0.0.1
。
按照搜到的常用的 iptables 转发端口的办法可以转发,但是客户端看到的源 IP 是 1.2.3.4
iptables -t nat -A PREROUTING -p tcp -m tcp -d 1.2.3.4 --dport 8888 -j DNAT --to-destination 10.0.0.2:8888
iptables -t nat -A POSTROUTING -p tcp -m tcp -d 10.0.0.2 --dport 8888 -j SNAT --to-source 1.2.3.4
iptables -t nat -A PREROUTING -p udp -m udp -d 1.2.3.4 --dport 8888 -j DNAT --to-destination 10.0.0.2:8888
iptables -t nat -A POSTROUTING -p udp -m udp -d 10.0.0.2 --dport 8888 -j SNAT --to-source 1.2.3.4
对 NAT 的了解非常模糊...希望能结合这个例子讲解一下,谢谢!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.