![在不使用 IP 路由的情况下保留 wireguard VPN 设置中的源 IP](https://linux22.com/image/759936/%E5%9C%A8%E4%B8%8D%E4%BD%BF%E7%94%A8%20IP%20%E8%B7%AF%E7%94%B1%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E4%BF%9D%E7%95%99%20wireguard%20VPN%20%E8%AE%BE%E7%BD%AE%E4%B8%AD%E7%9A%84%E6%BA%90%20IP.png)
我有以下设置
PC1(wireguard 客户端)-> PC2(wireguard 服务器,wg0,eth0)-> PC3(tcp 服务器)
192.168.1.100,10.1.1.2->192.168.1.101,10.1.1.1->192.168.1.102
192子网是WIFI网络。10.1.1.0/24是wireguard网络。
问题:
- 我该如何设置使用 iptables 仅让 PC3 看到 tcp 数据包的源 IP 来自 10.1.1.2?
使用以下规则,它可以到达 tcp 服务器,但源 IP 是 192.168.1.101(PC2,eth0)
iptables -t nat -A PREROUTING -p tcp -s 10.1.1.0/24 --dport 80 -j DNAT --to-destination 192.168.1.102:8080
iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j SNAT --to 192.168.1.101
更新:
问题:
- 我们不能使用 IP 路由的原因是,当在 k8s 中执行此操作时,在 IP 路由中使用 kube-proxy 服务时,它会抛出下一跳是无效网关。
有什么方法可以在 k8s 中存档这个吗?
谢谢!
答案1
你不能。要么使用SNAT
(IP 地址被替换),要么设置正确的 IP 路由。
对于特定的应用层协议(例如 HTTP),您可以使用应用程序级代理。