在隧道和以太网设备之间创建桥梁

在隧道和以太网设备之间创建桥梁

我有一台装有 Debian wheezy 的 Raspberry pi。存在三个连接:

eth0: native usb ethernet, connected to the router.
eth1: plug-in usb ethernet adapter
tun0: tunnel created by openconnect vpn client

现在,我想在eth1和之间创建一个桥接tun0,以便所有来自 的流量eth1都路由到 VPN。操作系统上运行的应用程序不需要 VPN 连接。

  ------------------------
  |  OS Local --> eth0 --|--> router
  |                      |
  |   Debian Wheezy      |
  |                      |
--|--> eth1 --> tun0 ----|--> vpn server
  ------------------------

我做了一些研究,发现它tun0是一个第 3 层设备,而是eth1一个第 2 层设备。它们不能直接互相通信。我首先想到的是,我是否可以创建一个tun1frometh1并连接tun1tun0但这可能吗?我该怎么做?

有什么想法吗?谢谢。

更新: vpn连接后当前路由表:

default dev tun0  scope link 
default via 192.168.0.1 dev eth0  metric 202 
44.33.22.11 via 192.168.0.1 dev eth0  src 192.168.0.14 
172.18.2.0/24 dev tun0  scope link 
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.14  metric 202 

答案1

你需要实现策略路由,这意味着有两个路由表。我们不会触碰main已经正确设置的路由表。如果您启用了 IPv4 转发,它将自动通过 OpenVPN 推送来自 eth1 的数据包。

首先,我们需要了解 OpenVP 如何设置路由表。为此,从命令行启动 OpenVPN 客户端:

    sudo openvpn --config YourConfigFile.conf

(或YourConfigFile.ovpn,无论你使用哪个)。最后几行将告诉你如何设置新的路由表,例如在我的情况下它说:

2015 年 7 月 14 日星期二 18:58:07 /sbin/ip route 通过 192.168.105.1 添加 My.Server.Public.IPaddress/32

2015 年 7 月 14 日星期二 18:58:07 /sbin/ip route 通过 10.8.73.5 添加 0.0.0.0/1

2015 年 7 月 14 日星期二 18:58:07 /sbin/ip route 通过 10.8.73.5 添加 128.0.0.0/1

2015 年 7 月 14 日星期二 18:58:07 /sbin/ip route 通过 10.8.73.5 添加 192.168.73.0/24

2015 年 7 月 14 日星期二 18:58:07 /sbin/ip route 通过 10.8.73.5 添加 10.8.73.0/24

2015 年 7 月 14 日星期二 18:58:07 初始化序列已完成

上述路由应引入可执行文件中,但其中一些数字是此特定 VPN 实例所特有的。然而,OpenVPN 提供了有用的环境变量,这些变量将保存上述使用的接口的值,并且非常方便:在此特定情况下,它们是

      route_net_gateway -> 192.168.105.1
      route_vpn_gateway -> 10.8.73.5 

因此,您需要添加到文件(我们称之为/etc/openvpn/route_up.sh)的行是:

 /sbin/ip route add Your.OpenVPN.Server.IPAddress/32 via $route_net_gateway table vpn
 /sbin/ip route add 0.0.0.0/1 via $route_vpn_gateway table vpn
 /sbin/ip route add 128.0.0.0/1 via $route_vpn_gateway table vpn
 /sbin/ip route add Remote.LAN.Net/24 via $route_vpn_gateway table vpn
 /sbin/ip route add 172.18.2.0/24 via $route_vpn_gateway table vpn

请记住在上面替换远程服务器的 IP 地址及其本地 LAN如果你使用它;如果您只是使用 OpenVPN 获取服务器的 IP,那么您根本不需要倒数第二条语句。请记住使文件可执行chmod 700 route_up.sh

此外,您还必须创建一个新文件,/etc/openvpn/route_down.sh同样也是可执行文件,它会拆除完全相同的路线(只需更改adddel)。

现在我们需要告诉你的 OpenVPN 避免实现路由,因为我们将手动执行此操作:在你的 YourConfigFile.conf 中,添加以下行:

        route-nopull
        up /etc/openvpn/route_up.sh
        down /etc/openvpn/route_down.sh

最后,我们需要为 VPN 设置不同的路由表。添加一个新的路由表,我们称之为vpn

       echo 200 vpn >> /etc/iproute2/rt_tables 

现在我们引入一条规则:

     ip rule add from 10.0.0.0/24 table vpn

我假设后面的网络eth110.0.0.0/24,如果不是,请相应地进行更改。

最后,你必须引入一个 MASQUERADE iptables 规则:

      iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

就是这个。

答案2

如果我理解正确的话,您正在尝试建立双以太网 VPN 直通,数据通过该直通进入eth1,并eth0连接到路由器(传出到互联网)。

您可以使用 iptables 将eth1流量重定向到tun0

sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
sudo iptables -A FORWARD -i tun0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i eth1 -o tun0 -j ACCEPT

相关内容