我正在尝试设置一个VPN服务器环境,以使用Apple提供的testing程序SimpleTunneler ,该程序使用iOS 9.0中引入的NETUnnelProviderManager。 对于服务器部分,我使用的是该程序的一部分的tunnel_server程序。
我select在这块板子上问这个问题,而不是一个苹果专用的问题,是因为我觉得基本的服务器和客户端组件正在工作,只剩下一个networkingconfiguration问题。
为了简单起见,我一直在使用设备级别的VPN,并且试图从我的iPhone上访问外部Web服务器(使用Yahoo地址98.139.183.24,端口80)来避免DNS。 我已经在设备上configurationnetworking扩展,将所有IP数据包路由到隧道。
当我尝试访问该站点时,我看到从客户端(iPhone)到服务器(在我的MacBook Pro上的tunnel_server)的stream量,最初是在utun2接口上创build的,这是一个与之关联的特殊接口隧道。
之后,我看到数据包在我的服务器上转到en0,然后出去到networking。
最初,我从来没有看到任何回应,并确定这是因为这些数据包的源地址没有正确的NAT。 经过大量的实验,我终于通过下面的pfctl规则得到了这个NAT:
nat on en0 inet from !(en0) to any -> (en0)
添加完这个之后,我现在看到正在进行NAT转发的数据包,甚至是从雅虎服务器返回的响应到我的服务器的en0接口。 但是,我从来没有看到这个响应被转发到我的服务器的utun2接口。 我不确定是否NATing,路由或其他问题。
如果有人有任何分类或解决scheme的build议,请让我知道。
这是我的设置信息:
Server: 10.15.68.160/21 (internal company networking, using WiFi on en0) Client: 10.15.68.199 (initially), but changes to 192.168.2.2/21 due to the configuration I have set for the server_tunnel program
有一件事似乎很奇怪这个设置是服务器和客户端都关联到192.168.2.2。 实际上,如果我试图从iPhone上find这个地址,我发现它碰到了我的服务器上运行的一个Web服务器,并且可以确认一切正在通过隧道。
这里是我的IP4路由表(来自netstat -nr):
Internet: Destination Gateway Flags Refs Use Netif Expire default 10.15.64.1 UGSc 468 113 en0 10.15.64/21 link#5 UCS 4 0 en0 10.15.64.1/32 link#5 UCS 2 0 en0 10.15.64.1 0:8:e3:ff:fd:90 UHLWIir 470 180 en0 1078 10.15.68.160/32 link#5 UCS 1 0 en0 10.15.68.199 70:3e:ac:7b:ea:6a UHLWIi 2 1259 en0 837 10.15.71.141 c4:d9:87:7a:89:b0 UHLWIi 2 256 en0 744 10.15.71.255 link#5 UHLWbI 1 108 en0 127 127.0.0.1 UCS 2 159 lo0 127.0.0.1 127.0.0.1 UH 4 568903 lo0 127.0.53.53 127.0.0.1 UHWIi 1 1 lo0 169.254 link#5 UCS 1 0 en0 192.168.2 link#5 UC 3 0 en0 192.168.2.2 192.168.2.2 UH 2 0 utun2 192.168.2.3 60:3:8:9c:ea:6e UHLWIi 1 31 lo0 192.168.2.255 link#5 UHLWbI 1 108 en0 255.255.255.255/32 link#5 UCS 2 0 en0 255.255.255.255 link#5 UHLWbI 1 99 en0
[注意:我最初在networking工程上发布了这个消息,但是我被告知这是脱离主题,我应该尝试重新发布服务器故障]
更新:
我和一个熟悉这种types的networking的人一起工作,我们能够得到configuration,这样ping就会从客户端设备,服务器,端点,然后回到服务器。 但是,不pipe我们做了什么,我们都无法将ping返回到客户端设备(iPhone)。
似乎这个问题可能是反向ARP在这里,可能是因为客户端和服务器似乎都分配了相同的地址“192.168.2.2”,但这只是一个猜测。 然而,苹果示例程序似乎不太可能允许这种types的用例,因为它是典型的隧道行为。