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

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

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

$ ip route показать:

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

решение1

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), у вас есть (как минимум) два варианта, как с этим справиться.

  • «пользовательская» таблица маршрутизации

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

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

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

решение2

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

Возьмем пакет, отправленный на произвольный интернет-адрес — в этом примере я буду использовать 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.

Связанный контент