如何转发stream量到VPN设备

我在一台充当路由器的虚拟机中设置了OpenWRT 。 它有两个networking接口:

  • br-lan:连接到vm 内部networking
  • eth1:通过NAT通过主机连接到互联网

我还设置了一个DamnSmallLinux(DSL)VM,它有一个networking接口:

  • eth0:连接到vm 内部networking

这个设置意味着DSL通过OpenWRT连接到互联网。

现在,OpenWRT创build一个连接到VPN的tun设备:

/*tun device on OpenWRT*/ tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.130.3.45 PtP:10.128.0.1 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:494 errors:0 dropped:0 overruns:0 frame:0 TX packets:494 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:41496 (40.5 KiB) TX bytes:41496 (40.5 KiB) 

我可以testing我是否通过ping VPN网关10.128.0.1连接到VPN:

 /*Ping VPN on OpenWRT*/ PING 10.128.0.1 (10.128.0.1): 56 data bytes 64 bytes from 10.128.0.1: seq=0 ttl=64 time=12.364 ms 64 bytes from 10.128.0.1: seq=1 ttl=64 time=13.326 ms 

默认情况下,DSL不能ping通10.128.0.1

如果我将以下规则添加到OpenWRT的防火墙,则DSL 可以 ping通10.128.0.1

 /*Zone rule for VPN, enables DSL to ping 10.128.0.1*/ config zone option input 'ACCEPT' option forward 'REJECT' option output 'ACCEPT' option name 'vpn' option masq '1' option network 'VPN' 

我现在想要通过VPN路由所有来自DSL的stream量,但我不知道该怎么做。 我曾尝试将以下路由添加到OpenWRT上的/etc/config/network文件中:

 /*Directs all traffic to tun0 but VPN does not reply.*/ config route option interface 'VPN' option target '0.0.0.0' option netmask '0.0.0.0' option gateway '10.128.0.1' 

当我添加这个路由后,做了tun0tcpdump ,确实看起来所有的stream量都被引导到VPN,问题是我没有得到任何答复。

有没有人知道如何正确地转发所有的stream量到VPN?

编辑

OpenWRT ifconfig:

 root@OpenWrt:~# ifconfig br-lan Link encap:Ethernet HWaddr 08:00:27:0E:CF:19 inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fd93:d43b:534d::1/60 Scope:Global inet6 addr: fe80::a00:27ff:fe0e:cf19/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:130 errors:0 dropped:0 overruns:0 frame:0 TX packets:139 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:10392 (10.1 KiB) TX bytes:15306 (14.9 KiB) eth0 Link encap:Ethernet HWaddr 08:00:27:0E:CF:19 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:152 errors:0 dropped:0 overruns:0 frame:0 TX packets:140 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:14368 (14.0 KiB) TX bytes:15632 (15.2 KiB) eth1 Link encap:Ethernet HWaddr 08:00:27:78:6B:EE inet addr:10.0.3.15 Bcast:10.0.3.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe78:6bee/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:246 errors:0 dropped:0 overruns:0 frame:0 TX packets:275 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:33158 (32.3 KiB) TX bytes:32283 (31.5 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:65 errors:0 dropped:0 overruns:0 frame:0 TX packets:65 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:5164 (5.0 KiB) TX bytes:5164 (5.0 KiB) tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.130.3.45 PtP:10.128.0.1 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:57 errors:0 dropped:0 overruns:0 frame:0 TX packets:57 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:4788 (4.6 KiB) TX bytes:4788 (4.6 KiB) 

OpenWRT具有它所需的所有接口(以及路由)能够ping远程gw(10.128.0.1)。 它看起来VPN回复。 好。

现在,在DSL上,你需要添加一条路由:10.128.0.X / 24(或者10.X / 8?取决于你在远程设置的内容…根据需要调整),网关10.130.3.45即OpenWRT,这是您需要经过10.128.xnetworking的“网关”)。 一个局域网只能通过一个网关访问另一个局域网,使用该网关的局域网IP,因为它是本地机器可以访问的唯一的东西:任何一个或多个局域网上的IPS。 看来你直接把DSL的远程IP,但DSL不知道如何达到它。 它可能默认发送到它的“默认网关”,可能是一个互联网路由器或任何东西,但显然不是OpenWRT(或至less不是OpenWRT 10.130.3.45接口,网关到10.X网)

我可能读对angular。

但是简而言之:

  • 将自己置于数据包中,并像您想要到达目的地一样,一跳一跳:

  • 你需要find“最接近的”路由(或者,如果没有,采取默认路由)去下一跳。

  • 继续像这样一跳一跳(向前,也是向后),你很快就会发现哪一跳没有到达下一跳的必要步骤(或者跳到错误的跳跃)

即:

  • 我是从DSL发送的ping数据包。 我的来源是DSL-ip。 我的目的地是abcd(10.128.0.1,我想)。

  • 我查看ROUTE表,并select最符合abcd的目的地(即0.0.0.0/0(defautl gw),10.0.0.0/8(gw 10.130.3.45)和特殊的10.128.0.x (与gw 10.120.3.45),我select了最新的,因为它是一个更精确的适合,即更多的“比特”匹配我的目的地)。

  • 所以我走那条路,去10.130.3.45。 (如果我的本地防火墙允许的话)

  • 现在我是一个源包“….”(可能因为SNAT而改变)的ping包,和目的地“…..”(可以随DNAT改变)。 我看看路由表…

你当然也需要转发iptables来允许你继续下一跳(以及build立连接的规则,从而允许回复数据包也回来。

不要让两个方向,它会打开你的局域网到任何传入的VPN而不是只有build立的连接!) – Olivier Dulac刚刚编辑