我正在开发一个解决scheme,通过OpenVPN隧道将驻留在Virtualbox guest中的开发堆栈公开到Internet。
OpenVPN客户端在客户虚拟机内部启动并且可以很好地连接到具有公共IP的EC2实例。
我在EC2盒子上添加了一个路由,在访客虚拟机端包含局域网。 实际上,访客虚拟机具有以下接口:
eth0:10.0.2.15 tun0:10.8.0.2
tun0:10.8.0.1 eth0:10.254.254.234
我可以从客户端ping通EC2到tun0(10.8.0.2)以及eth0(10.0.2.15)
现在有趣的部分开始,当EC2端我包括一个DNAT规则,使SIPstream量从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
因为存在正确的路由,通过隧道发送stream量,当我使用tun0上的tcpdump的时候,我看到消息到达另一端(Virtualbox)。 然而,该数据包的最终目的地是虚拟机上的eth0,并且从不会从tun0转发到eth0。
IP转发已启用,并且在iptables的FORWARD链中不存在REJECT规则。
此外,如果我让进程(一个SIP代理)监听隧道接口,即使在使用tcpdump进行监听时看到数据包,并且代理绑定到隧道的IP,它也不会报告接收其日志中的数据。
你不是这个意思吗
iptables -t nat -I PREROUTING -s 10.254.254.234 -j DNAT --to-destination 10.0.2.15
(你的规则是两个目的地址)