2

У меня есть 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 - это устройство третьего уровня, а eth1 - устройство второго уровня. Они не могут разговаривать друг с другом напрямую. Первое, что приходит мне в голову, это если я могу создать 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 

1 ответ1

2

Вам необходимо реализовать политику маршрутизации, что означает наличие двух таблиц маршрутизации. Мы не будем трогать main таблицу маршрутизации, которая уже правильно настроена. Если вы включили пересылку IPv4, она автоматически отправит пакеты из eth1 через ваш OpenVPN.

Во-первых, нам нужно узнать, как ваш OpenVP настраивает таблицу маршрутизации. Для этого в конце запустите клиент OpenVPN из командной строки:

    sudo openvpn --config YourConfigFile.conf

(или YourConfigFile.ovpn , в зависимости от того, что вы используете). Последние строки расскажут вам, как она устанавливает новую таблицу маршрутизации, например, в моем случае это говорит:

Вт июл 14 18:58:07 2015 /sbin /ip route add My.Сервер.Public.IP-адрес /32 через 192.168.105.1

Вт 14 июл 18:58:07 2015 /sbin /ip route add 0.0.0.0/1 через 10.8.73.5

Вт июл 14 18:58:07 2015 /sbin /ip route add 128.0.0.0/1 через 10.8.73.5

Вт 14 июл 18:58:07 2015 /sbin /ip route add 192.168.73.0/24 через 10.8.73.5

Вт 14 июл 18:58:07 2015 /sbin /ip route add 10.8.73.0/24 через 10.8.73.5

Вт июл 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-адрес вашего удаленного сервера и его локальной сети, если вы его используете ; если вы просто используете OpenVPN для получения IP-адреса вашего сервера, тогда вам вообще не нужен следующий за последним оператор. Не забудьте сделать файл исполняемым, chmod 700 route_up.sh .

Кроме того, вам также нужно будет создать новый файл /etc/openvpn/route_down.sh , также исполняемый, который разрушает точно такие же маршруты (просто измените add на del).

Теперь нам нужно указать вашему 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

где я предположил, что сеть eth1 - 10.0.0.0/24 , если это не так, измените ее соответствующим образом.

Наконец, вам нужно будет ввести правило iptables MASQUERADE:

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

Это оно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .