我正在研究一种解决方案,通过 OpenVPN 隧道将驻留在 Virtualbox 客户机内部的开发堆栈公开到互联网。
OpenVPN 客户端在来宾虚拟机内部启动,并成功连接到具有公共 IP 的 EC2 实例。
我在 EC2 盒子上添加了一条路由,以包含客户虚拟机端的 LAN。实际上,客户虚拟机具有以下接口:
客人
eth0:10.0.2.15 tun0:10.8.0.2
EC2
tun0:10.8.0.1 eth0:10.254.254.234
我可以从 EC2 ping 到客户机端的 tun0(10.8.0.2) 以及 eth0(10.0.2.15)
现在有趣的部分开始了,当我在 EC2 端包含一个 DNAT 规则以将 SIP 流量从 10.254.254.234 定向到 10.0.2.15 时。
iptables -t nat -I PREROUTING -d 10.254.254.234 -j DNAT --to-destination 10.0.2.15
由于存在正确的路由,流量通过隧道发送,当我使用 tcpdump 通过 tun0 时,我看到消息到达另一端 (Virtualbox)。但是该数据包的最终目的地是虚拟机上的 eth0,并且它永远不会从 tun0 转发到 eth0。
IP 转发已启用,并且 iptables 中的 FORWARD 链上不存在 REJECT 规则。
此外,如果我让进程(SIP 代理)监听隧道接口,即使我使用 tcpdump 监听时看到数据包,并且代理绑定到隧道的 IP,它也永远不会报告在其日志中接收到流量。
答案1
你难道不是说
iptables -t nat -I PREROUTING -s 10.254.254.234 -j DNAT --to-destination 10.0.2.15
(您的规则是两个目标地址)