Рейтинг:2

Не удается подключиться по SSH ко второму сетевому интерфейсу в Ubuntu 20.04 на EC2

флаг br

у меня есть впк 10.0.0.0/16 с интернет-шлюзом и двумя подсетями 10.0.100.0/24 и 10.0.200.0/24 в той же зоне доступности. Единая группа безопасности позволяет TCP/22 входящий от 0.0.0.0/0 и все исходящие. У меня также есть два сетевых интерфейса, привязанных к группе безопасности, по одному в каждой подсети. Каждый сетевой интерфейс имеет свой эластичный IP-адрес. Существует таблица маршрутизации для каждой подсети, указывающей 0.0.0.0/0 к интернет-шлюзу.

Вот проблема, с которой я столкнулся: у меня есть экземпляр EC2, связанный с обоими сетевыми интерфейсами, но я могу использовать SSH из Интернета только через тот, который связан с eth0.

Это конфигурация:

$ uname -a
Linux ip-10-0-100-70 5.4.0-1045-aws #47-Ubuntu SMP Вт, 13 апреля, 07:02:25 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

$ ip а
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    ссылка/петля 00:00:00:00:00:00 брд 00:00:00:00:00:00
    инет 127.0.0.1/8 область хоста lo
       valid_lft навсегда
    inet6 :: 1/128 узел области видимости 
       valid_lft навсегда
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc fq_codel состояние UP группа по умолчанию qlen 1000
    ссылка/эфир 02:88:59:6e:78:c0 brd ff:ff:ff:ff:ff:ff
    inet 10.0.100.70/24 brd 10.0.100.255 область действия глобальная динамическая eth0
       valid_lft 1806 сек. selected_lft 1 806 сек.
    ссылка на область inet6 fe80::88:59ff:fe6e:78c0/64 
       valid_lft навсегда
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc fq_codel состояние UP группа по умолчанию qlen 1000
    ссылка/эфир 02:7d:b2:d4:b5:ea brd ff:ff:ff:ff:ff:ff
    inet 10.0.200.118/24 brd 10.0.200.255 область глобальная динамическая eth1
       valid_lft 1807 сек. selected_lft 1 807 сек.
    ссылка на область inet6 fe80::7d:b2ff:fed4:b5ea/64 
       valid_lft навсегда

$ IP-маршрут
по умолчанию через 10.0.100.1 dev eth0 proto dhcp src 10.0.100.70 метрика 100 
по умолчанию через 10.0.200.1 dev eth1 proto dhcp src 10.0.200.118 метрика 200 
10.0.200.0/24 dev eth1 ссылка на область ядра proto src 10.0.200.118 
10.0.200.1 dev eth1 proto dhcp scope link src 10.0.200.118 метрика 200 
10.0.100.0/24 dev eth0 ссылка на область ядра proto src 10.0.100.70 
10.0.100.1 dev eth0 proto dhcp scope link src 10.0.100.70 метрика 100

$ IP-правило
0: из всех локальных поисковых систем
32766: из всех основных поисковых запросов
32767: из всех поисковых запросов по умолчанию

$ sudo ufw статус подробный
Статус: неактивен

$ сс -nlput
Состояние Netid Recv-Q Send-Q Локальный адрес: порт Одноранговый адрес: процесс порта   
udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:*                
udp UNCONN 0 0 10.0.200.118%eth1:68 0.0.0.0:*                
udp UNCONN 0 0 10.0.100.70%eth0:68 0.0.0.0:*                
TCP ПРОСЛУШИВАТЬ 0 4096 127.0.0.53%lo:53 0.0.0.0:*                
TCP ПРОСЛУШИВАТЬ 0 128 0.0.0.0:22 0.0.0.0:*                
TCP ПРОСЛУШИВАТЬ 0 128 [::]:22 [::]:* 

Таким образом, оказывается, что сетевые интерфейсы настроены правильно и демон SSH прослушивает все интерфейсы. Демон SSH работает правильно, потому что я уже подключен через SSH к eth0. И оба интерфейса, кажется, отлично пропускают трафик в Интернет:

$ ping -I eth0 -c 5 1.1.1.1
PING 1.1.1.1 (1.1.1.1) от 10.0.100.70 eth0: 56 (84) байт данных.
64 байта из 1.1.1.1: icmp_seq=1 ttl=38 время=11,5 мс
64 байта из 1.1.1.1: icmp_seq=2 ttl=38 время=11,5 мс
64 байта из 1.1.1.1: icmp_seq=3 ttl=38 время=11,5 мс
64 байта из 1.1.1.1: icmp_seq=4 ttl=38 время=11,6 мс
64 байта из 1.1.1.1: icmp_seq=5 ttl=38 время=11,5 мс

--- 1.1.1.1 статистика пинга ---
5 пакетов передано, 5 получено, 0% потери пакетов, время 4007 мс
rtt min/avg/max/mdev = 11,470/11,515/11,567/0,031 мс

$ ping -I eth1 -c 5 1.1.1.1
PING 1.1.1.1 (1.1.1.1) от 10.0.200.118 eth1: 56 (84) байт данных.
64 байта из 1.1.1.1: icmp_seq=1 ttl=38 время=11,7 мс
64 байта из 1.1.1.1: icmp_seq=2 ttl=38 время=11,8 мс
64 байта из 1.1.1.1: icmp_seq=3 ttl=38 время=11,7 мс
64 байта из 1.1.1.1: icmp_seq=4 ttl=38 время=11,8 мс
64 байта из 1.1.1.1: icmp_seq=5 ttl=38 time=11,8 мс

--- 1.1.1.1 статистика пинга ---
5 пакетов передано, 5 получено, 0% потери пакетов, время 4008 мс
rtt min/avg/max/mdev = 11,705/11,755/11,829/0,042 мс

Но не могу подключиться:

$ ssh -i ~/.ssh/cert.pem ubuntu@3.<отредактировано> # EIP для eth0
Добро пожаловать в Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-1045-aws x86_64)
...

$ ssh -i ~/.ssh/cert.pem ubuntu@52.<отредактировано> # EIP для eth1
ssh: подключиться к хосту 52. <отредактировано> порт 22: время ожидания операции истекло

Я устанавливаю Netflow на эт1 сетевой адаптер в AWS и может видеть трафик:

2 840416055907 eni-07cc18b6f1b89378e <отредактировано> 10.0.200.118 54268 22 6 9 576 1623280724 1623280761 ПРИНЯТЬ OK

Поэтому я чувствую, что ОС сбрасывает трафик. Но брандмауэр не настроен, и демон SSH прослушивает все интерфейсы. Я также пробовал отслеживать журналы /var/log/{syslog,auth.log,kern.log} и dmesg, но ни в одном из них ничего не появилось, пока я пытался подключиться.

Я надеюсь, что упустил что-то простое, потому что сейчас я немного растерялся. Любая помощь будет очень признательна!

A.B avatar
флаг cl
A.B
Вы говорите: «Для каждой подсети существует **таблица** маршрутизации, указывающая `0.0.0.0/0` на интернет-шлюз». . В дампах конфигурации вашей сети нет ни дополнительных таблиц маршрутизации, ни дополнительных правил маршрутизации, указывающих на эти таблицы маршрутизации. Итак, можете ли вы уточнить, что вы имели в виду под «Для каждой подсети существует таблица маршрутизации ...»? Таблица маршрутизации не является маршрутом (записью). А правильный multi-homing требует таблиц и правил
Micah Henning avatar
флаг br
Спасибо за ваш ответ @A.B. Таблицы маршрутизации определены в AWS, чтобы исходящий трафик из экземпляра EC2 мог найти интернет-шлюз.
A.B avatar
флаг cl
A.B
Поскольку у sshd нет параметра -I, такого как ping для блокировки маршрутизации к интерфейсу, я боюсь, что у вас возникнут проблемы с маршрутизацией на вашем экземпляре. Работает только первый маршрут по умолчанию, второй не влияет на sshd.
Рейтинг:0
флаг br

Трафик из эт1 необходимо настроить для правильной маршрутизации:

$ sudo ip rule add из таблицы 10.0.200.118 по умолчанию
$ sudo ip route add default через 10.0.200.1 dev eth1 table default
$ sudo ip route очистить кеш

Поскольку мы не хотим вручную подключаться к экземпляру по SSH для ввода этих команд, я создал сценарий systemd, который будет выполняться при запуске.

/home/ubuntu/двойной-home.sh

#!/бин/баш

ADDR=$(ip -finet addr show eth1 | sed -En -e 's/.*inet ([0-9.]+).*/\1/p')
GATEWAY=$(echo $ADDR | sed -En -e 's/(([0-9]+\.){3}).*/\11/p') # предполагает маску /24
sudo ip правило добавить из таблицы $ADDR по умолчанию
sudo ip route add default через $GATEWAY dev eth1 table default
sudo ip route очистить кеш

/etc/systemd/система/двойной дом.сервис

[Ед. изм]
Description=Настроить маршрутизацию eth1
После=network.target
After=cloud-final.service

[Оказание услуг]
Тип=простой
ExecStart=/bin/bash/home/ubuntu/dual-home.sh

[Установить]
WantedBy=cloud-init.target

Затем включите службу: $ sudo systemctl включить двойной дом

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.