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


2

我有一个带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层设备。他们无法直接相互交谈。我想到的第一件事就是如果我可以创建一个tun1来自eth1连接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 

你真的需要这个??? 请发布您的路由表,sudo ip route show
MariusMatutiae 2015年

@MariusMatutiae路线表发布。
De Gao

@MariusMatutiae抱歉,我在哪里可以找到答案?
De Gao

我刚刚发布了您的查询答案,请来看看。
MariusMatutiae 2015年

Answers:


2

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

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

    sudo openvpn --config YourConfigFile.conf

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

Tue Jul 14 18:58:07 2015 / sbin / ip route添加My.Server.Public.IPaddress / 32 via 192.168.105.1

Tue Jul 14 18:58:07 2015 / sbin / ip route通过10.8.73.5添加0.0.0.0/1

Tue Jul 14 18:58:07 2015 / sbin / ip route通过10.8.73.5添加128.0.0.0/1

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

Tue Jul 14 18:58:07 2015 / sbin / ip route add 10.8.73.0/24 via 10.8.73.5

Tue Jul 14 18:58:07 2015初始化序列完成

上面的路由应该引入可执行文件,除了这些数字中的一些是这个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的IP地址; 如果您只是使用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

就是这个。


这并没有提供问题的答案。要对作者进行批评或要求澄清,请在帖子下方留言。
qasdfdsaq 2015年

这不回答问题,也没有提供提问者所追求的功能。
qasdfdsaq 2015年

是,我确定。当我教这些信息时,你已经犯了许多学生犯的一个简单但常见的错误。
qasdfdsaq 2015年

2
@qasdfdsaq根据这个评论,你幼稚的反应,以及你在这个网站上的过去记录,很难相信你可以教任何课程,除了可能是坏礼仪101.
MariusMatutiae 2015年

@MariusMatutiae:我很想澄清你的.OpenVPN:server.IPAddress和Remote.LAN.Net。首先是服务器的“公共IP”?另一个是什么?谢谢!
Lennart Rolland
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.