Маршрутизация трафика tun0 через tun1 (двухскачковая VPN)

Цель: направить весь интернет-трафик eth0> tun0> tun1 для двухскачковой VPN. Подходит ли следующая таблица маршрутизации для этой цели?

$ ip route show:

0.0.0.0/1 via 10.8.1.1 dev tun1 
default via 10.8.3.1 dev tun0 proto static metric 50 
10.8.1.0/24 dev tun1 proto kernel scope link src 10.8.1.6 
10.8.3.0/24 dev tun0 proto kernel scope link src 10.8.3.4 metric 50 
101.133.213.73 via 10.8.3.1 dev tun0 
127.0.0.0/8 dev lo scope link 
128.0.0.0/1 via 10.8.1.1 dev tun1 
191.72.65.45 via 182.160.0.1 dev eth0 proto static metric 100 
182.160.0.0/24 dev eth0 proto kernel scope link src 182.160.0.19 metric 100 
182.160.0.0/24 dev eth0 proto dhcp scope link src 182.160.0.19 metric 208 
182.160.0.1 dev eth0 proto static scope link metric 100

Обновление: из полученного ответа приведенная выше таблица маршрутизации не является двухскачковым VPN-соединением, поскольку маршрут позволит трафику от eth0 идти напрямую в tun1 без предварительного прохождения через tun0.

1
задан 20 January 2020 в 21:34
2 ответа
eth0 : 182.160.0.19/24 (GW: 182.160.0.1)
tun0 : 10.8.3.4/24 (GW: 10.8.3.1 / VPN endpoint : 191.72.65.45 via eth0)
tun1 : 10.8.1.6/24 (GW: 10.8.1.1 / VPN endpoint : 101.133.213.73 via tun0)

Таким образом, весь трафик (включая входящий от tun0) будет маршрутизироваться через tun1, за исключением локального трафика в сети Ethernet (182.160.0.0/24) и локального трафика в tun0 / "VPN1" ( 10.8.3.0/24).

С этой таблицей маршрутизации также весь трафик, исходящий от eth0, будет маршрутизироваться через tun1 , который не упоминается / не запрашивается в вопросе ... Это нормально для вас? В случае положительного ответа вы можете оставить эту настройку.

Если это нежелательная ситуация (вы не хотите направлять трафик с eth0 на tun1 / tun0), у вас есть (по крайней мере) два варианта действий. it.

  • "настраиваемая" таблица маршрутизации

Может быть несколько таблиц маршрутизации, и на основе правила / политики вы можете управлять тем, какой трафик будет обрабатываться другой таблицей, кроме таблицы по умолчанию. Таким образом, вы можете установить настраиваемую таблицу маршрутизации, где GW по умолчанию будет tun1, и только трафик, исходящий от tun0, будет указываться на эту настраиваемую таблицу маршрутизации.

  • Сетевое пространство имен

Таким образом вы можете изолировать целые интерфейсы tun от eth0 (с внутренняя маршрутизация между пространствами имен), поэтому вы можете настроить простую (по умолчанию) таблицу маршрутизации в пространстве имен, чтобы только трафик от tun0 мог достигать tun1.

0
ответ дан 21 January 2020 в 00:05

Предполагая, что желаемая последовательность - трафик из вашей локальной сети должен идти с локального компьютера -> tun0 -> tun1, это, вероятно, то, что происходит,однако это происходит способом, который не отображается на маршруте tracreroute.

Давайте возьмем пакет, предназначенный для произвольного адреса в Интернете - в этом примере я буду использовать 8.8.8.8.

Компьютер принимает пакет и ищет как его отправить. Он видит, что он должен быть отправлен через tun1 (потому что 2 маршрута ниже эквивалентны маршруту по умолчанию, но более ограничены, поэтому предпочтительнее по сравнению с маршрутом по умолчанию - в этом случае выполняется первый маршрут) -

 0.0.0.0/1 via 10.8.1.1 dev tun1
 128.0.0.0/1 via 10.8.1.1 dev tun1

Но вот часть, которая может быть неочевидной. Если вы посмотрите на конфигурацию tun1, вы обнаружите, что у него конечная точка 101.133.213.73. Для этого IP-адреса существует определенный маршрут, который проходит через tun0

 101.133.213.73 via 10.8.3.1 dev tun0

Точно так же существует другой маршрут

  191.72.65.45  via 182.160.0.1 dev eth0 proto static metric 100 

Этот маршрут делает трафик, отправленный через tun0, напрямую доступным через интерфейс Ethernet.

Поскольку это очень специфический маршрут, трафик на 101.133.213.73 будет проходить через tun0. Таким образом, весь трафик, идущий в Интернет (через tun1), должен проходить через 101.133.213.73, который сам по себе является туннелем, так что да, данные будут проходить через оба туннеля.

traceroute не покажет этого, потому что пакет не знает, что он проходит через туннель. Тем не менее, вы все равно можете проверить, что это происходит, посмотрев на нижние уровни - Генерация трафика в другом окне, выполняя «sudo tcpdump -n -i any». Вы увидите, что всякий раз, когда пакет отправляется в более широкий Интернет, пакет будет отправлен через каждый из eth0, tun0, tun1, и то же самое будет верно для возвращенных пакетов. Все пакеты, связанные с tun0, будут иметь цель 101.133.213.73.

0
ответ дан 21 January 2020 в 00:05

Теги

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