我想要云中的虚拟机 ( VM1
) 充当服务器 ( VM2
) 的 TCP 代理,这样 的 IP 地址VM2
就不会暴露给客户端。客户端应连接到VM1
端口上的 公共 IP 地址9735
,并且所有流量都应转发到VM2
同一端口。回复应反过来进行。
VM1
和VM2
通过 wireguard 连接。两者都有两个接口:分别为 wireguard 接口 ( wg0
) 和 internet 接口 ( ens5
) eth0
。VM1
上的 IP 地址wg0
为10.200.200.1
,而VM2
为10.200.200.2
。wireguard 连接工作正常。我可以telnet 10.200.200.2:9735
从成功VM1
。
当我尝试在 的公共 IP 上进行 telnet 时出现了问题VM1
。
我VM1
通过这种方式配置了iptables。
# Enable IP forwarding
# https://serverfault.com/questions/240532/iptables-dnat-not-working
echo 1 > /proc/sys/net/ipv4/ip_forward
# Reset and allow everything
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -t raw -F
iptables -t raw -X
iptables -t security -F
iptables -t security -X
export WAN=ens5
export LAN=wg0
# Filter rules, default accept, log some
iptables -P INPUT ACCEPT
iptables -A INPUT -p tcp --dport 9735 -j LOG --log-level info --log-prefix "fiter_in"
iptables -P OUTPUT ACCEPT
iptables -A OUTPUT -p tcp --dport 9735 -j LOG --log-level info --log-prefix "fiter_out"
iptables -P FORWARD ACCEPT
iptables -A FORWARD -p tcp --dport 9735 -j LOG --log-level info --log-prefix "filter_forward"
iptables -t nat -A PREROUTING -p tcp -i $LAN -j LOG --log-level info --log-prefix "prerouting_fr_wg0"
iptables -t nat -A PREROUTING -p tcp -i $WAN --dport 9735 -j LOG --log-level info --log-prefix "prerouting_9735"
iptables -t nat -A PREROUTING -p tcp -i $WAN --dport 9735 -j DNAT --to-destination 10.200.200.2:9735
iptables -t nat -A POSTROUTING -o $LAN -j LOG --log-level info --log-prefix "postrouting_to_wg0"
iptables -t nat -A POSTROUTING -o $WAN -j LOG --log-level info --log-prefix "postrouting_to_ens5"
iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE
在 上VM1
,iptables 转发工作正常,我可以看到使用 转发的数据包tcpdump
。
root@myserver:~# tcpdump -n -A tcp -i wg0
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on wg0, link-type RAW (Raw IP), snapshot length 262144 bytes
19:53:56.838847 IP [client public ip address].16190 > 10.200.200.2.9735: Flags [S], seq 2996679219, win 64240, options [mss 1420,sackOK,TS val 1658363264 ecr 0,nop,wscale 7], length 0
E..<[email protected].......
...?>&....3.........r.........
b...........
在 上VM2
,输出什么都没有。就像没有收到任何东西tcpdump
一样。VM2
关于如何进一步调试此问题有什么建议吗?