Linux tun接口数据包路由

我对以下情况下的ip数据包stream有疑问。

该场景是:

  1. 客户端的tun0(10.0.0.2/8)接口和物理无线LAN卡wlan0(IP地址不能修复),wlan0可以连接到互联网,
  2. 在服务器端(Ubuntu 12.04 amd64),另一个tun0(10.0.0.1/8)接口和一个物理以太网卡eth0(192.168.1.38/24),eth0位于NAT防火墙后面的专用networking中,可以通过它连接到互联网防火墙(防火墙作为网关),
  3. 在服务器端运行“echo 1> / proc / sys / net / ipv4 / ip_forward”
  4. 在服务器端运行“iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE”

以下是scheme的图示:

--------------- ---------------- | | | | | client tun0 |----------| client wlan0 | | 10.0.0.2 | | ip not fix | | | | | --------------- ---------------- | | internet | | ---------------- | | | firewall | | (gateway) | | 192.168.1.1 | | | ---------------- | | private network | 192.168.1.0/24 | --------------- ---------------- | | | | | server tun0 |----------| server eth0 | | 10.0.0.2 | | 192.168.1.38 | | | | | --------------- ---------------- 

我使用了两个非常简单的类似vpn的客户机/服务器程序来读/写两个tun0接口的ip包,并在wlan0和eth0之间build立一个隧道,使得来自10.0.0.2的ip包可以达到10.0.0.1,反之亦然例如可以从10.0.0.1到10.0.0.2运行ftp)。

但是,如果我想使用客户端tun0(10.0.0.2)来浏览网页,http请求将从10.0.0.2开始,并在因特网IP地址(当然不是10.0.0.1)处发送。 在到达服务器tun0(10.0.0.1)之后,http请求(我认为)将被转发到服务器eth0(因为ip_forward处于打开状态,我认为这个转发http请求的源地址仍然是10.0.0.2,纠正我,如果我错了),在那里NAT发生重新包装HTTP请求来自eth0(即源IP地址更改为192.168.1.38,因为我已经运行iptables命令),然后重新打包的http请求通过防火墙(然后是互联网)到达目的地。

当http回复(从网站)到达eth0服务器时,反向NAT应该在那里发生。 我的问题是:

  1. 反向NAT会将http回复的目标IP地址还原为10.0.0.2,
  2. 服务器eth0如何知道在哪里转发反向NAT的http回复?
  3. eth0将应答的目的IP地址反向NAT转发到服务器tun0(10.0.0.1)10.0.0.2?
  4. 我是否需要在服务器端添加路由以正确路由/转发反向NAT http响应? 如果是的话,怎么样?
  5. 我是否需要在服务器端添加一些iptables规则来正确路由/转发反向NAT http响应? 如果是的话,怎么样?

有任何想法吗。 感谢您的任何build议。