Я использую 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
А теперь повторите тест.