Virtualbox IP转发中的隧道接口

我正在开发一个解决scheme,通过OpenVPN隧道将驻留在Virtualbox guest中的开发堆栈公开到Internet。

OpenVPN客户端在客户虚拟机内部启动并且可以很好地连接到具有公共IP的EC2实例。

我在EC2盒子上添加了一个路由,在访客虚拟机端包含局域网。 实际上,访客虚拟机具有以下接口:

客人

eth0:10.0.2.15 tun0:10.8.0.2

EC2

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 

(你的规则是两个目的地址)