Назад | Перейти на главную страницу

Переадресация портов CentOS не работает

Я использую CentOS 6.5, и я добавил следующие команды в свои iptables для пересылки всего входящего трафика с порта 8088 на 4569:

iptables -A PREROUTING -t nat -p udp --dport 8088 -i eth0 -j DNAT --to-destination 127.0.0.1:4569
iptables -I FORWARD 1 -d 127.0.0.1 -p udp --dport 4569 -j ACCEPT

iptables --list показывает следующий вывод:

iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     udp  --  anywhere             localhost.localdomain udp dpt:iax

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Но когда я беру трассировку пакетов на udp-порту 4569, я не вижу пакетов на этом порту. Затем я добавил это:

iptables -A PREROUTING -t nat -p udp --dport 8088 -i eth0 -j REDIRECT --to-ports 4569

И мой iptable выглядит так:

Table: nat
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination
1    DNAT       udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:8088 to:127.0.0.1:4569
2    REDIRECT   udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:8088 redir ports 4569

Но все равно не повезло. Что я делаю не так?

Чтобы перенаправить пакеты на интерфейс обратной петли, вам необходимо использовать REDIRECT цель.

iptables -A PREROUTING -t nat -p udp --dport 8088 -i eth0 -j REDIRECT --to-ports 4569

В противном случае вы измените адрес назначения до того, как будет принято решение о маршрутизации. 127.0.0.1. Это означает, что он будет считаться марсианский пакет ядром и отбрасывается политикой фильтрации обратного пути.

За это поведение отвечают два параметра ядра:

  • net.ipv4.conf.eth0.route_localnet

route_localnet - BOOLEAN

Не рассматривайте адреса обратной связи как марсианский источник или пункт назначения при маршрутизации. Это позволяет использовать 127/8 для целей локальной маршрутизации.

по умолчанию ЛОЖЬ

  • net.ipv4.conf.eth0.rp_filter

rp_filter - ЦЕЛОЕ

0 - проверка источника отсутствует.
1 - Строгий режим, как определено в RFC3704 Strict Reverse Path Каждый входящий пакет проверяется на соответствие FIB, и если интерфейс не является лучшим обратным путем, проверка пакета завершится ошибкой. По умолчанию неудачные пакеты отбрасываются.
2 - Свободный режим, как определено в RFC3704 Loose Reverse Path Адрес источника каждого входящего пакета также проверяется на соответствие FIB, и если адрес источника недоступен через какой-либо интерфейс, проверка пакета завершится ошибкой.

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

Максимальное значение из conf / {all, interface} / rp_filter используется при проверке источника на {interface}.

Значение по умолчанию - 0. Обратите внимание, что некоторые дистрибутивы включают его в сценариях запуска.

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

Возможно, вам потребуется включить переадресацию ip в ядре Linux.

Сначала проверьте текущее значение.

sysctl net.ipv4.ip_forward

Ноль означает, что переадресация IP отключена. Это значение по умолчанию.

Включите переадресацию IP.

sysctl -w net.ipv4.ip_forward = 1

А теперь повторите тест.