Я пытаюсь направить клиентский трафик на кластер kubernetes, NodePort прослушивает 192.168.1.100.30000
.
Потребности клиента сделать запрос на 192.168.1.100.8000
поэтому я добавил следующее правило REDIRECT в iptables:
iptables -t nat -I PREROUTING -p tcp --dst 192.168.1.100 --dport 8000 -j ПЕРЕНАПРАВЛЕНИЕ --на порт 30000
Затем я выдаю завиток 192.168.1.100:8000
однако в tcpdump я вижу другой порт:
# tcpdump -i lo -nnvvv хост 192.168.1.100 и порт 8000
tcpdump: прослушивание на lo, тип канала EN10MB (Ethernet), размер захвата 262144 байта
[Интерфейс: lo] 20:39:22.685968 IP (tos 0x0, ttl 64, id 20590, смещение 0, флаги [DF], proto TCP (6), длина 40)
[Интерфейс: lo] 192.168.1.100.8000 > 192.168.1.100.49816: Flags [R.], cksum 0xacda (правильно), seq 0, ack 3840205844, win 0, длина 0
[Интерфейс: lo] 20:39:37.519256 IP (tos 0x0, ttl 64, id 34221, смещение 0, флаги [DF], proto TCP (6), длина 40)
Я ожидаю, что tcpdump покажет что-то вроде
192.168.1.100.8000 > 192.168.1.100.30000
Тем не менее, он показывает и вызывает ошибку отказа в соединении, поскольку ни один процесс не указан в списке. 192.168.1.100.49816
.
192.168.1.100.8000 > 192.168.1.100.49816
Я использую тестовую среду, поэтому у меня нет доступа к удаленным устройствам, поэтому я использую завиток
чтобы проверить путь ПЕРЕНАПРАВЛЕНИЯ iptables.
Есть ли причина, по которой добавление правила REDIRECT приводит к тому, что tcpdump перенаправляет трафик на порт, отличный от указанного?
Редактировать:
После того, как @A.B. предложение добавило следующее правило OUTPUT:
iptables -t nat -I ВЫВОД -d 192.168.1.100 -p tcp --dport 8000 -j ПЕРЕНАПРАВЛЕНИЕ --на порт 30000
и curl продолжается дальше, количество пакетов для цепочки OUTPUT действительно увеличивается (хотя пакет цепочки PREROUTING REDIRECT не увеличился):
2 10 600 ПЕРЕНАПРАВЛЕНИЕ tcp -- * * 0.0.0.0/0 192.168.1.100 tcp dpt:8000 перенаправление портов 30000
Тем не менее, получая следующую ошибку:
# curl -vk https://192.168.1.100:8000/v1/api
* О подключении() к порту 192.168.1.100 8000 (#0)
* Попытка 192.168.1.100...
* Подключено к порту 192.168.1.100 (192.168.1.100) 8000 (#0)
* Инициализация NSS с помощью certpath: sql:/etc/pki/nssdb
* Ошибка NSS -12263 (SSL_ERROR_RX_RECORD_TOO_LONG)
* SSL получил запись, длина которой превышает максимально допустимую.
* Закрытие соединения 0
curl: (35) SSL получил запись, длина которой превышает максимально допустимую.
Кроме того, попытался добавить сеть удаленной системы, на этот раз количество пакетов PREROUTING REDIRECT CHAIN увеличивается после выполнения завиток удаленной системы...
(но ВЫХОДНАЯ ЦЕПЬ не увеличивается):
2 34 2040 ПЕРЕНАПРАВЛЕНИЕ tcp -- * * 0.0.0.0/0 172.16.128.1 tcp dpt:8000 перенаправление портов 30000
Ошибка:
# ip netns exec remotesystem curl -vk https://192.168.1.100:8000/v1/api
* О подключении() к порту 192.168.1.100 8000 (#0)
* Попытка 192.168.1.100...
* Время соединения истекло
* Не удалось подключиться к 192.168.1.100:8000; Время соединения истекло
* Закрытие соединения 0
curl: (7) Не удалось подключиться к 192.168.1.100:8000; Время соединения истекло