Рейтинг:2

Хост Linux, маршрутизирующий трафик VLAN, не может получать или устанавливать сетевые подключения

флаг bs

У меня есть система CentOS 7 с тремя интерфейсами. Я недавно преобразовал один на этих интерфейсах в использование VLAN. Эта система серверов как брандмауэр и маршрутизатор между различными сетями. Все казалось, работало, как ожидалось, за исключением одного пункта. я не могу подключиться в или из системы CentOS с/на любые хосты в VLAN.

Например, если я ssh с 192.168.32.95 (хост в VLAN 32) на 192.168.32.1 (интерфейс VLAN 32 на хосте CentOS), я вижу пакеты с tcpdump поступают на интерфейс enp3s0, помеченные vlan 32. Цепочка iptables INPUT регистрирует и ПРИНИМАЕТ пакет. После этого пакет исчез. SYN-ACK не отправляется, RST не отправляется.

Точно так же для чего-то вроде NTP от 192.168.32.1 до 192.168.32.3, брандмауэр регистрирует и ПРИНИМАЕТ исходящий пакет NTP, но затем не пакет виден tcpdump, уходящим на enp3s0 (т.е. enp3s0.32)

Пинги из VLAN 32 работают... Я могу пропинговать хост CentOS из VLAN 32 и получить ответ.

Система CentOS пересылает пакеты между всеми комбинациями интерфейсы VLAN и не-VLAN.

Любые мысли о том, что может объяснить эти проблемы с подключением, или даже способ дальнейшего отслеживания того, что происходит?

# показать 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 навсегда
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast состояние UP группа по умолчанию qlen 1000
    ссылка/эфир c0:25:e9:0e:cb:a1 brd ff:ff:ff:ff:ff:ff
    inet 10.20.30.177/28 brd 10.20.30.191 глобальная область enp1s0
       valid_lft навсегда
3: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast состояние UP группа по умолчанию qlen 1000
    ссылка/эфир 84:16:f9:05:3a:fb brd ff:ff:ff:ff:ff:ff
    inet 192.168.16.1/24 brd 192.168.16.255 глобальная область enp2s0
       valid_lft навсегда
4: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast состояние UP группа по умолчанию qlen 1000
    ссылка/эфир 6c:f0:49:42:5b:fa brd ff:ff:ff:ff:ff:ff
5: enp3s0.32@enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    ссылка/эфир 6c:f0:49:42:5b:fa brd ff:ff:ff:ff:ff:ff
    инет 192.168.32.1/24 brd 192.168.32.255 глобальная область охвата enp3s0.32
       valid_lft навсегда
6: enp3s0.50@enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    ссылка/эфир 6c:f0:49:42:5b:fa brd ff:ff:ff:ff:ff:ff
    инет 192.168.50.1/24 brd 192.168.50.255 глобальная область охвата enp3s0.50
       valid_lft навсегда

Вот цепочка INPUT, где я поместил правило ведения журнала и ACCEPT прямо в начало.

# iptables -t filter -S ВХОД
-P ВХОД ПАДЕНИЕ
-A ВВОД -i lo -j ПРИНЯТЬ
-A ВХОД -m состояние --state СВЯЗАННО, УСТАНОВЛЕНО -j ПРИНЯТЬ
-A INPUT -s 192.168.32.95/32 -d 192.168.32.1/32 -p tcp -m tcp --dport 22 -j LOG --log-prefix "ТЕСТ В: "
-A INPUT -s 192.168.32.95/32 -d 192.168.32.1/32 -p TCP -m TCP --dport 22 -j ПРИНЯТЬ
-A ВХОД -m состояние --state НЕДОПУСТИМО -j НЕДОПУСТИМО
-A ВХОД -m состояние --state БЕЗ ОТСЛЕЖИВАНИЯ -j НЕОТСЛЕЖИВАЕТСЯ
-A ВХОД -i enp1s0 -j ​​ВХОД-ВНЕШНИЙ
-A ВХОД -i enp2s0 -j ​​ВХОД-СРЕДНИЙ
-A ВХОД -i enp3s0.32 -j ВХОД-V32
-A ВХОД -i enp3s0.50 -j ВХОД-V50
-A INPUT -j LOG --log-prefix "УДАЛИТЬ ВХОД EOC: " --log-tcp-options --log-ip-options
-A ВВОД -j DROP

Брандмауэр регистрирует пакет SYN.

4 июля 14:21:49 вне ядра: [112380.489332] ТЕСТ ВХОД: IN=enp3s0.32 OUT= MAC=6c:f0:49:42:5b:fa:52:54:00:35:f4:e4:08 :00:45:00:00:3c SRC=192.168.32.95 DST=192.168.32.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=17731 DF PROTO=TCP SPT=51926 DPT=22 WINDOW=29200 RES= 0x00 СИН URGP=0

Вывод tcpdump показывает несколько прибывающих копий SYN-пакета.

# tcpdump -e -nn -i enp3s0 хост 192.168.32.95 и хост 192.168.32.1
14:21:49.516122 52:54:00:35:f4:e4 > 6c:f0:49:42:5b:fa, ethertype 802.1Q (0x8100), длина 78: vlan 32, p 0, ethertype IPv4, 192.168. 32.95.51926 > 192.168.32.1.22: флаги [S], seq 3631520692, win 29200, параметры [mss 1460,sackOK,TS val 69303507 ecr 0,nop,wscale 7], длина 0
14:21:50.529043 52:54:00:35:f4:e4 > 6c:f0:49:42:5b:fa, ethertype 802.1Q (0x8100), длина 78: vlan 32, p 0, ethertype IPv4, 192.168. 32.95.51926 > 192.168.32.1.22: флаги [S], seq 3631520692, win 29200, параметры [mss 1460,sackOK,TS val 69303760 ecr 0,nop,wscale 7], длина 0
14:21:52.543926 52:54:00:35:f4:e4 > 6c:f0:49:42:5b:fa, ethertype 802.1Q (0x8100), длина 78: vlan 32, p 0, ethertype IPv4, 192.168. 32.95.51926 > 192.168.32.1.22: флаги [S], seq 3631520692, win 29200, параметры [mss 1460,sackOK,TS val 69304264 ecr 0,nop,wscale 7], длина 0
14:21:56.607938 52:54:00:35:f4:e4 > 6c:f0:49:42:5b:fa, ethertype 802.1Q (0x8100), длина 78: vlan 32, p 0, ethertype IPv4, 192.168. 32.95.51926 > 192.168.32.1.22: флаги [S], seq 3631520692, win 29200, параметры [mss 1460,sackOK,TS val 69305280 ecr 0,nop,wscale 7], длина 0
14:22:04.799936 52:54:00:35:f4:e4 > 6c:f0:49:42:5b:fa, ethertype 802.1Q (0x8100), длина 78: vlan 32, p 0, ethertype IPv4, 192.168. 32.95.51926 > 192.168.32.1.22: флаги [S], seq 3631520692, win 29200, параметры [mss 1460,sackOK,TS val 69307328 ecr 0,nop,wscale 7], длина 0

Дополнительная запрашиваемая информация:

# ip маршрут
по умолчанию через 50.196.138.190 dev enp1s0
10.20.30.176/28 dev enp1s0 ссылка на прото-ядро области src 10.20.30.177
192.168.16.0/24 dev enp2s0 ссылка на прото-ядро области src 192.168.16.1
192.168.32.0/24 dev enp3s0.32 прото-ссылка на область ядра src 192.168.32.1
192.168.50.0/24 dev enp3s0.50 ссылка на область действия ядра src 192.168.50.1
# IP-правило
0: из всех локальных поисковых систем
32766: из всех основных поисковых запросов
32767: из всех поисковых запросов по умолчанию
# ip route show table local
широковещательная передача 10.20.30.176 dev enp1s0 ссылка на прото-ядро src 10.20.30.177
локальный 10.20.30.177 dev enp1s0 прото область ядра host src 10.20.30.177
широковещательная передача 10.20.30.191 dev enp1s0 ссылка на прото-ядро src 10.20.30.177
широковещательная передача 127.0.0.0 dev lo proto ссылка на область ядра src 127.0.0.1
local 127.0.0.0/8 dev lo proto область ядра host src 127.0.0.1
local 127.0.0.1 dev lo proto область ядра host src 127.0.0.1
широковещательная передача 127.255.255.255 dev lo proto ссылка на область ядра src 127.0.0.1
широковещательная передача 192.168.16.0 dev enp2s0 ссылка на прото-ядро src 192.168.16.1
local 192.168.16.1 dev enp2s0 область ядра proto host src 192.168.16.1
широковещательная передача 192.168.16.255 dev enp2s0 ссылка на прото-ядро src 192.168.16.1
широковещательная передача 192.168.32.0 dev enp3s0.32 ссылка на прото-ядро src 192.168.32.1
локальный 192.168.32.1 dev enp3s0.32 прото область ядра host src 192.168.32.1
широковещательная передача 192.168.32.255 dev enp3s0.32 ссылка на прото-ядро src 192.168.32.1
широковещательная передача 192.168.50.0 dev enp3s0.50 ссылка на прото-ядро src 192.168.50.1
локальный 192.168.50.1 dev enp3s0.50 область ядра proto host src 192.168.50.1
широковещательная передача 192.168.50.255 dev enp3s0.50 ссылка на прото-ядро src 192.168.50.1

Я добавил конкретное правило ведения журнала и ПРИНЯТЬ в цепочку OUTPUT, но из него ничего не было зарегистрировано.

# iptables -S ВЫВОД
-P ВЫХОД ПАДЕНИЕ
-A ВЫВОД -o lo -j ПРИНЯТЬ
-A ВЫВОД -m состояние --state СВЯЗАННО, УСТАНОВЛЕНО -j ПРИНЯТЬ
-A ВЫВОД -s 192.168.32.1/32 -d 192.168.32.95/32 -p tcp -m tcp --sport 22 -j LOG --log-prefix "ПРОВЕРКА: "
-A ВЫВОД -s 192.168.32.1/32 -d 192.168.32.95/32 -p tcp -m tcp --sport 22 -j ПРИНЯТЬ
-A ВЫВОД -m состояние --state НЕДОПУСТИМО -j НЕДОПУСТИМО
-A ВЫВОД -m состояние --state БЕЗ ОТСЛЕЖИВАНИЯ -j НЕ ОТСЛЕЖИВАЕТСЯ
-A ВЫХОД -o enp1s0 -j ​​ВЫХОД-EXT
-A ВЫХОД -o enp2s0 -j ​​ВЫХОД-СРЕДНИЙ
-A ВЫХОД -o enp3s0.32 -j ВЫВОД-V32
-A ВЫХОД -o enp3s0.50 -j ВЫХОД-V50
-A ВЫВОД -j ЖУРНАЛ --log-prefix "УДАЛИТЬ ВЫВОД EOC: " --log-tcp-options --log-ip-options
-A ВЫХОД -j СБРОС
# сс -атн
Состояние Recv-Q Send-Q Локальный адрес:Порт Адрес равноправного узла:Порт
ПРОСЛУШАТЬ 0 128 127.0.0.1:199 *:*
ПРОСЛУШАТЬ 0 128 *:22 *:*
SYN-RECV 0 0 192.168.32.1%if378475780:22 192.168.32.95:36778
ПРОСЛУШАТЬ 0 100 127.0.0.1:25 *:*
ЭСТАБ 0 292 192.168.16.1:22 192.168.16.61:49618

# кошка /etc/sysconfig/network-scripts/ifcfg-enp3s0.32
УСТРОЙСТВО=enp3s0.32
ТИП=Ethernet
ONBOOT=да
VLAN=да
BOOTPROTO=статический
IP-АДРЕС=192.168.32.1
СЕТЕВАЯ МАСКА=255.255.255.0
IPV6INIT=нет

# кот /etc/sysconfig/network-scripts/ifcfg-enp3s0
УСТРОЙСТВО=enp3s0
ТИП=Ethernet
ONBOOT=да
BOOTPROTO=статический
IPV6INIT=нет

Вот три попытки ssh на этот хост. Каждый приведенный ниже список приведен после завершения предыдущего ssh с истечением времени ожидания подключения и после того, как предыдущий SYN-RECV исчез. Я удалил строки LISTEN и ESTAB из вывода, поскольку они практически такие же, как и в предыдущем выводе. Так же Строки SYN-RECV в столбце процесса были пустыми.

# сс-атнп
Состояние Recv-Q Send-Q Локальный адрес:Порт Адрес равноправного узла:Порт
SYN-RECV 0 0 192.168.32.1%if-8096:22 192.168.32.95:47290

# сс-атнп
Состояние Recv-Q Send-Q Локальный адрес:Порт Адрес равноправного узла:Порт
SYN-RECV 0 0 192.168.32.1%if378479604:22 192.168.32.95:47440

# сс-атнп
Состояние Recv-Q Send-Q Локальный адрес:Порт Адрес равноправного узла:Порт
SYN-RECV 0 0 192.168.32.1%if378479648:22 192.168.32.95:47580

Другой эксперимент, я попытался запустить несколько соединений ssh ​​с интервалом в 1 секунду:

для х в 1 2 3 4 5 6 7 8 9 10 ; сделать ssh -n 192.168.32.1 дата и сон 1; сделано

и после того, как весь процесс ssh запущен, вывод ss был таким, как показано ниже. Программа tcpdump не сообщила о пакетах SYN-ACK. вывод ss оставался прежним, пока не истекло время ожидания соединения.

# сс -атн
Состояние Recv-Q Send-Q Локальный адрес:Порт Адрес равноправного узла:Порт
SYN-RECV 0 0 192.168.32.1%if378480635:22 192.168.32.95:50492
SYN-RECV 0 0 192.168.32.1%if378480636:22 192.168.32.95:50502
SYN-RECV 0 0 192.168.32.1%if378480636:22 192.168.32.95:50498
SYN-RECV 0 0 192.168.32.1%if378480635:22 192.168.32.95:50494
СИН-РЕКВ 0 0 192.168.32.1:22 192.168.32.95:50488
SYN-RECV 0 0 192.168.32.1%if378480634:22 192.168.32.95:50486
SYN-RECV 0 0 192.168.32.1%if378480634:22 192.168.32.95:50490
СИН-РЕКВ 0 0 192.168.32.1:22 192.168.32.95:50504
SYN-RECV 0 0 192.168.32.1%if378480636:22 192.168.32.95:50496
SYN-RECV 0 0 192.168.32.1%if378480636:22 192.168.32.95:50500

Настройка системы довольно стандартная конфигурация. До недавнего изменения интерфейсом enp3s0 была сеть 192.168.32.0/24. Единственными реальными изменениями были файлы ifcfg-enp3s0* в sysconfig и обновление правил брандмауэра. Большинство хостов без изменений переехали из старой подсети во влан 32.

A.B avatar
флаг cl
A.B
Можете ли вы также указать маршруты? `IP-маршрут; IP-правило`? А также исходящие правила iptables (filter/OUTPUT и т.д.). При запуске `ss -atn | grep ^SYN` несколько раз, есть ли какой-либо SYN-RECV прямо во время создания журнала?
A.B avatar
флаг cl
A.B
1/ Вход работает, SYN-RECV означает, что SYN получен, проблема в выводе 2/ Что такое интерфейс `if378475780`, почему его нет в выводе `ip addr show`? И зачем его вообще использовать? это нигде не описано. Используете ли вы механизмы LD_PRELOAD на sshd? Я не думаю, что у него есть возможность привязки к устройству (SO_BINDTODEVICE). Это тот же процесс sshd? попробуйте снова `ss`, но также добавьте опцию `-p`. Конечно, добавьте всю полезную информацию, которую вы пропустили.
A.B avatar
флаг cl
A.B
Я очень удивлен выводом команды `ss`, но поскольку я не могу это объяснить... извините.
djdomi avatar
флаг za
Я читаю эту страницу каждый день и каждый день я узнаю гораздо больше команд для себя, что полезно +1 для предложения ss, даже если это плохой термин :)

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

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