ssh через несколько интерфейсов eth0 wlan0 в интернет

ssh через несколько интерфейсов eth0 wlan0 в интернет

Я пытаюсь открыть несколько обратных SSH-туннелей через разные интерфейсы (на Raspberry Pi с Raspbian Strech) в качестве запасного варианта.

При этом у меня есть проблемы с открытием исходящих ssh-соединений через разные интерфейсы. Сейчас есть:

  • eth0 как статический IP (192.168.1.200)
  • wlan0 через dhcp (192.168.178.100)

Привязка ssh к IP-адресу работает для «eth0», но не для «wlan0»:

  • ssh -b 192.168.1.200 user@externalipработает
  • ssh -b 192.168.178.100 user@externalipявляетсяНЕТработающий

кроме того, я могу проложить маршрут через оба интерфейса в интернет:

  • ssh -b 192.168.1.200 user@externalipработает

sudo traceroute -i wlan0 google.com

traceroute to google.com (172.217.21.14), 30 hops max, 60 byte packets
 1  192.168.178.1 (192.168.178.1)  12.528 ms  17.229 ms  21.757 ms
 2  192.0.0.1 (192.0.0.1)  26.576 ms  41.445 ms  47.408 ms ...
  ...

sudo traceroute -i eth0 google.com

traceroute to google.com (172.217.21.14), 30 hops max, 60 byte packets
 1  192.168.1.1 (192.168.1.1)  0.537 ms  0.404 ms  0.570 ms
  ...

Есть идеи, как заставить работать ssh через оба интерфейса?

маршрут -n:

0.0.0.0         192.168.1.1     0.0.0.0         UG    202    0        0 eth0
0.0.0.0         192.168.178.1   0.0.0.0         UG    303    0        0 wlan0
192.168.0.0     0.0.0.0         255.255.252.0   U     202    0        0 eth0
192.168.178.0   0.0.0.0         255.255.255.0   U     303    0        0 wlan0

решение1

По умолчанию только первая соответствующая запись в (главной) таблице маршрутизации будет использоваться для определения маршрута к месту назначения. Более того, пакет, который не получен по этой соответствующей записи, будет отброшен из-заrp_filter.

Ваша настройка требует маршрутизации политики: маршрут теперь должен зависеть не только от пункта назначения, но и от источника, сохраняя несколько маршрутов в нескольких таблицах маршрутизации и выбирая адекватную таблицу, таким образом, маршрут, в зависимости от источника. Предыдущее утверждение остается верным: будет выбран первый соответствующий маршрут в таблице, но он может быть выбран из (a) другой(их) таблицы(й).

Поэтому сначала вы устанавливаете дополнительные таблицы маршрутизации (значения таблиц выбираются «произвольно»), чтобы дополнить то, что не работало бы при использовании только таблицы main:

ip route add table 1921681    default via 192.168.1.1 dev eth0
ip route add table 192168178  default via 192.168.178.1 dev wlan0

Затем используется правильный селектор источника для выбора подходящей таблицы сip rule. Здесь было бы достаточно только одного нового правила, но ради симметрии будут добавлены оба, что обеспечивает большую гибкость в основной таблице маршрутизации, например, при изменении метрик (см. далее):

ip rule add from 192.168.0.0/22   lookup 1921681
ip rule add from 192.168.178.0/24 lookup 192168178

Правила теперь такие:

# ip rule
0:  from all lookup local 
32764:  from 192.168.178.0/24 lookup 192168178 
32765:  from 192.168.0.0/22 lookup 1921681 
32766:  from all lookup main 
32767:  from all lookup default 

Рассматривайте записи 32764et 32765как исключения из записи, 32766просматривающей обычную mainтаблицу.

Вот и все, теперь ваши предыдущие команды будут работать так, как задумано, оба маршрута могут работать одновременно, если вы укажете исходный IP с помощью опции -b.

Если вы не укажете IP-адрес источника, система не будет немедленно выполнять сопоставление с дополнительными правилами и таблицами маршрутизации, а по умолчанию будет использовать выбор, сделанный при использовании основной таблицы: победит первый совпадающий маршрут, тем самым выбрав источник 192.168.1.200в вашей текущей настройке.

Повторим еще раз: если вы явно не укажете исходный IP-адрес (как это обычно бывает), ваш основной маршрут все равно выберетпо умолчаниюмаршрут по умолчанию и соответствующий исходный IP по умолчанию, затем правила 32764и 32765будут гарантировать, что он будет работать правильно в любом случае. Таким образом, вы можете играть с метриками, чтобы выбрать, какой маршрут и IP будет иметь приоритет.

Например, чтобы wlan0теперь быть предпочтительным, когда не указан исходный IP, увеличьте метрику 202до , eth0чтобы маршрут по умолчанию был выбран первым, таким образом IP будет выбран первым. Явное указание исходного IP все равно напрямую совпадет с правилами 1000или . Ранее установленные соединения считаются «указывающими исходный IP», поэтому не будут нарушены.wlan03276432765

ip route add default via 192.168.1.1 dev eth0 metric 1000
ip route del default via 192.168.1.1 dev eth0 metric 202

Некоторые дополнительные примечания:

  • Не пытайтесь удалить все маршруты по умолчанию в main(обычной) таблице, иначе ваши соединения больше не будут устанавливаться, если приложение не указывает исходный IP-адрес (" Network is unreachable").
  • Возможны и более сложные случаи, включая наличие одного и того же IP-адреса в двух разных сетях, но это потребует дополнительных настроек и, вероятно, помощи netfilter и iptables.
  • Можно даже сбалансировать нагрузку на эти маршруты, используяiptablesиМеткии использовать эти метки как селектор в ip rule, но сложнее заставить его работать правильно во всех случаях, особенно при смешивании соединений, где указан исходный IP и где исходный IP остается на выбор системы, а также особенно для UDP. Это может также потребовать неудобного использования NAT и ослабленияrp_filter.

решение2

Убедитесь, что у вас включены интерфейсы.

ip link set dev eth0 up
ip link set dev wlan0 up

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