Создать мост между туннелем и устройством Ethernet

3359
De Gao

У меня есть Raspberry Pi с Debian Wheezy. Существует три соединения:

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и подключиться tun1и tun0. Но возможно ли это? Как я могу это сделать?

Есть идеи? Благодарю.

ОБНОВЛЕНИЕ: таблица текущих маршрутов после подключения 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  
2
Тебе это действительно нужно ??? Пожалуйста, оставьте свою таблицу маршрутизации, * sudo ip route show *. MariusMatutiae 8 лет назад 0
Таблица маршрутов @MariusMatutiae опубликована. De Gao 8 лет назад 0
@MariusMatutiae sorry but where can I find the answer? De Gao 8 лет назад 0
Я только что опубликовал свой ответ на ваш запрос, пожалуйста, посмотрите его. MariusMatutiae 8 лет назад 0

1 ответ на вопрос

2
MariusMatutiae

You need to implement policy routing, which means having two routing tables. We shall not touch the main routing table which is already correctly setup. If you have enabled IPv4 forwarding, it will automatically push the packets from eth1 through your OpenVPN.

First, we need to learn how your OpenVP sets up the routing table. To this, end, start the OpenVPN client from the command line:

 sudo openvpn --config YourConfigFile.conf 

(or YourConfigFile.ovpn, whichever you use). The last lines will tell you how it sets up the new routing table, for instance in my case it says:

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

Tue Jul 14 18:58:07 2015 /sbin/ip route add 0.0.0.0/1 via 10.8.73.5

Tue Jul 14 18:58:07 2015 /sbin/ip route add 128.0.0.0/1 via 10.8.73.5

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

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 Initialization Sequence Completed

The routes above should be introduced into an executable file, except that some of these numbers are peculiar to this particular instance of the VPN. OpenVPN however provides useful environmental variables which will hold the values of the interfaces used above, and which come in very handy: in this specific case, they are

 route_net_gateway -> 192.168.105.1 route_vpn_gateway -> 10.8.73.5 

Thus the lines you need to add to a file (let's call it /etc/openvpn/route_up.sh) are:

 /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 

Remember to substitute, in the above, the IP address of your remote server, and of its local LAN if you use it; if you are just using the OpenVPN to obtain an IP of your server, then you do not need the next to the last statement at all. Remember to make the file executable, chmod 700 route_up.sh.

Also, you will also have to create a new file, /etc/openvpn/route_down.sh, also executable, which tears down exactly the same routes (just change add to del).

Now we need to tell your OpenVPN to avoid implementing the routes, because we will do this manually: in your YourConfigFile.conf, add the following lines:

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

Lastly, we need to setup the different routing table for the VPN. Add a new routing table, let's call it vpn:

 echo 200 vpn >> /etc/iproute2/rt_tables 

Now we introduce a rule:

 ip rule add from 10.0.0.0/24 table vpn 

where I assumed that the network behind eth1 is 10.0.0.0/24, if it is not please change accordingly.

Lastly, you will have to introduce a MASQUERADE iptables rule:

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

This is it.

Это не дает ответа на вопрос. Чтобы критиковать или запросить разъяснения у автора, оставьте комментарий под своим постом. qasdfdsaq 8 лет назад 0
Это не отвечает на заданный вопрос и не обеспечивает функциональность, которую задает просящий. qasdfdsaq 8 лет назад 0
Да, я уверен. Вы допустили простую, но распространенную ошибку, которую допускают многие студенты, когда я преподаю эту информацию. qasdfdsaq 8 лет назад 0
@qasdfdsaq Судя по этому комментарию, вашей детской реакции и вашей прошлой записи на этом сайте, трудно поверить, что вы можете преподавать любой курс, кроме, возможно, Плохих Маннеров 101. MariusMatutiae 8 лет назад 2
@MariusMatutiae: Я хотел бы получить разъяснения на Your.OpenVPN: server.IPAddress и Remote.LAN.Net. во-первых, это "публичный IP" сервера? а какой другой? Спасибо! Lennart Rolland 6 лет назад 0
@LennartRolland ** 1): ** Да. ** 2): ** Это локальная сеть, в которой находится сервер OpenVPN, иногда вы хотите иметь к нему доступ. Например, предположим, что вы установили сервер OpenVPN ** дома **, и вы подключаетесь к нему, когда вас нет дома. Тогда вам наверняка захочется подключиться к вашему серверу OpenVPN ** и ** к его локальной сети (которая отображается как * удаленная * для вас, когда вы находитесь вдали от дома). Если вместо этого вы используете сервер OpenVPN, предоставленный коммерческим предприятием, например, чтобы обойти гео-ограничения, то вам не нужно связываться с локальной сетью, в которой находится сервер. MariusMatutiae 6 лет назад 0
@MariusMatutiae: Спасибо, что прояснили это отлично! Lennart Rolland 6 лет назад 0

Похожие вопросы