Как заставить ssh использовать второй интерфейс с более высокой метрикой?


9

У меня есть CrunchBang VM с двумя интерфейсами, eth0и eth1, каждый из которых подключается к OpenWRT VM ( eth0будучи 10.232.64.20и eth1будучи 10.232.65.20). Я использую Network Manager и DHCP. Моя общая цель - иметь несколько sshсвязей и связывать их с ifenslave.

По умолчанию eth1(по некоторым причинам) это шлюз по умолчанию:

user@crunchbang:~$ ip ro
default via 10.232.65.1 dev eth1  proto static
10.232.64.0/24 dev eth0  proto kernel  scope link  src 10.232.64.20
10.232.65.0/24 dev eth1  proto kernel  scope link  src 10.232.65.20

Я добавил маршрут для eth0:

user@crunchbang:~$ sudo ip route add default via 10.232.64.1 dev eth0  proto static metric 1

Тогда у меня есть два маршрута:

user@crunchbang:~$ ip ro
default via 10.232.65.1 dev eth1  proto static
default via 10.232.64.1 dev eth0  proto static  metric 1
10.232.64.0/24 dev eth0  proto kernel  scope link  src 10.232.64.20
10.232.65.0/24 dev eth1  proto kernel  scope link  src 10.232.65.20

Однако sshвыходит только через eth1:

user@crunchbang:~$ ssh -b 10.232.64.20 user@1.2.3.4
ssh: connect to host 1.2.3.4 port 22: Connection timed out

user@crunchbang:~$ ssh -b 10.232.65.20 user@1.2.3.4
Enter passphrase for key '/home/user/.ssh/id_rsa': 

После изменения eth0метрики у меня есть:

user@crunchbang:~$ ip ro
default via 10.232.64.1 dev eth0  proto static  metric 1
default via 10.232.65.1 dev eth1  proto static  metric 2
10.232.64.0/24 dev eth0  proto kernel  scope link  src 10.232.64.20
10.232.65.0/24 dev eth1  proto kernel  scope link  src 10.232.65.20

И теперь sshвыходит только через eth0:

user@crunchbang:~$ ssh -b 10.232.64.20 user@1.2.3.4
Enter passphrase for key '/home/user/.ssh/id_rsa': 

user@crunchbang:~$ ssh -b 10.232.65.20 user@1.2.3.4
ssh: connect to host 1.2.3.4 port 22: Connection timed out

Как заставить sshиспользовать интерфейс с более высокой метрикой?

редактировать

Я реализовал и протестировал конфигурацию в 4.2. Маршрутизация для нескольких разделов uplink / провайдеров Linux Advanced Routing & Traffic Control HOWTO. Учитывая, что конфигурация проста, и что я не сталкивался с ошибками, я просто покажу код и результаты с минимальным объяснением.

root@crunchbang:~# ip route add 10.232.64.0/24 dev eth0 src 10.232.64.20 table T0
root@crunchbang:~# ip route add default via 10.232.64.1 table T0
root@crunchbang:~# ip route add 10.232.65.0/24 dev eth1 src 10.232.65.20 table T1
root@crunchbang:~# ip route add default via 10.232.65.1 table T1
root@crunchbang:~# ip route flush table main
root@crunchbang:~# ip route add 10.232.64.0/24 dev eth0 src 10.232.64.20
root@crunchbang:~# ip route add 10.232.65.0/24 dev eth1 src 10.232.65.20
root@crunchbang:~# ip rule add from 10.232.64.20 table T0
root@crunchbang:~# ip rule add from 10.232.65.20 table T1
root@crunchbang:~# ip route add default scope global nexthop via 10.232.64.1 dev eth0 weight 1 nexthop via 10.232.65.1 dev eth1 weight 1

Вот сгенерированные таблицы маршрутизации:

root@crunchbang:~# ip route show table T0
default via 10.232.64.1 dev eth0 
10.232.64.0/24 dev eth0  scope link  src 10.232.64.20 

root@crunchbang:~# ip route show table T1
default via 10.232.65.1 dev eth1 
10.232.65.0/24 dev eth1  scope link  src 10.232.65.20 

root@crunchbang:~# ip ro
default 
    nexthop via 10.232.64.1  dev eth0 weight 1
    nexthop via 10.232.65.1  dev eth1 weight 1
10.232.64.0/24 dev eth0  scope link  src 10.232.64.20 
10.232.65.0/24 dev eth1  scope link  src 10.232.65.20 

При такой конфигурации ssh подключается через оба интерфейса:

user@crunchbang:~$ ssh -b 10.232.64.20 user@1.2.3.4
Enter passphrase for key '/home/user/.ssh/id_rsa': 

user@crunchbang:~$ ssh -b 10.232.65.20 user@1.2.3.4
Enter passphrase for key '/home/user/.ssh/id_rsa': 

Тем не менее, похоже, что мне нужно потерять Network Manager. Если бы кто-нибудь мог объяснить, почему это плохая идея, или предупредить о подводных камнях, я был бы признателен за это.

Edit2

Удаление Network Manager прошло хорошо. У меня есть только один последний вопрос. Каков текущий стандартный способ загрузки конфигурации при загрузке?


Я только что обнаружил 4.2. Маршрутизация для нескольких каналов связи / провайдеров . Я обновлю вопрос в ожидании реализации.
Миримир

Это сработало, поэтому я обновлю свой вопрос.
Миримир

Я не понимаю, как загрузить маршрутизацию при загрузке, потому что это требует прав root. Выполнение этого с помощью скрипта работает нормально, но я бы предпочел перезагрузить компьютер без установки.
Миримир

Ответы:


1

Во-первых, ваше решение проблемы хорошее. Во-вторых, это зависит от ОС. Crunchbag основан на debian, поэтому эти решения могут сделать эту работу:

/server/487939/permanently-adding-source-policy-routing-rules

В системах на основе RHEL также есть возможность добавлять <ifname>-ruleи <ifname>-route.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.