如何转发流量到 VPN 设备

如何转发流量到 VPN 设备

我已经设置OpenWRT在充当路由器的虚拟机中。它有两个网络接口:

  • br-lan:已连接到虚拟机内部网络
  • eth1:通过 NAT 通过主机连接到互联网

我还设置了一个具有一个网络接口的 DamnSmallLinux (DSL) VM:

  • eth0:连接到虚拟机内部网络

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

现在,OpenWRT 创建了一个连接到 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  P-t-P: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)

我可以通过 ping VPN 网关来测试是否已连接到 VPN 10.128.0.1

/*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 的防火墙中添加以下规则,那么 DSL10.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 的流量,但我不知道该怎么做。我尝试将以下路由添加到/etc/config/networkOpenWRT 上的文件:

/*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'  

当我添加此路由后执行操作tcpdumptun0,确实出现所有流量都被定向到 VPN,问题是我没有收到任何回复。

有人知道如何正确地将所有流量转发到 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  P-t-P: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)

答案1

OpenWRT 具有所需的所有接口(因此也具有路由),能够 ping 远程网关 (10.128.0.1)。而且看起来 VPN 已经回复了。很好。

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

我可能读得有点斜着了。

简而言之:

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

  • 您需要找到“最近”的路线(如果没有,则采用默认路线)到达下一跳。

  • 如此一跳一跳地进行(向前,也向后),你很快就会发现哪一跳没有到达下一跳的必要步骤(或者可能跳到了错误的一跳)

IE:

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

  • 我查看了 ROUTE 表,并选择了最精确适合 abcd 的目的地(即,在 0.0.0.0/0(默认网关)、10.0.0.0/8(网关为 10.130.3.45)和特殊的 10.128.0.x(网关为 10.120.3.45)之间,我选择了最新的,因为它更精确地适合,即更多的“位”与我的目的地匹配)。

  • 所以我选择那条路线,然后转到 10.130.3.45。(如果我的本地防火墙允许的话)

  • 现在我有一个 ping 数据包,其源为“...”(可能因 SNAT 而改变),目标为“.....”(可能因 DNAT 而改变)。然后我查看路由表...

当然,您还需要转发 iptables 以允许您继续进行到下一跳(并使用建立连接的规则,从而允许回复数据包也返回。

不要允许两个方向,否则你的 LAN 将向来自 VPN 的任何传入内容开放,而不仅仅是已建立的连接!) – Olivier Dulac 刚刚编辑

相关内容