Iptables перенаправить на локальный хост?


13

Предположим, у меня есть сеть с сервером, маршрутизирующим все соединения из сети в Интернет. Как настроить iptables таким образом, чтобы вместо маршрутизации входящих подключений к Интернету он направлял их на локальный порт 8080. Вся помощь приветствуется.


Проблема в том, что при простом перенаправлении (IP-адрес назначения NAT) вы потеряете исходный IP-адрес назначения. Вы хотите настроить прозрачный HTTP-прокси или он должен обрабатывать другие протоколы, кроме HTTP?
Пабук

Неважно, прозрачно оно или нет
DankMemes

Перенаправление всего трафика на прокси является базой для прозрачного прокси :)
pabouk

Вот еще один ответ, который действительно помог мне: unix.stackexchange.com/questions/111433/…
Рен Т.

Ответы:


6
sysctl net.ipv4.ip_forward=1 
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8080

1
не используйте жирный шрифт ....

Благодарность! Я еще не пробовал это, но я подозреваю, что я пропустил команду ip forwarding. И в следующий раз, пожалуйста, используйте блоки кода, а не полужирный.
DankMemes

@AlexAntonov, пожалуйста, используйте блоки кода. Выделите текст в режиме редактирования и щелкните значок скобок.
DankMemes

@ZoveGames, извините, это исправлено.
Алекс Антонов

2
Я экспериментировал с этим. В ip_forward sysctl нет необходимости. Однако опция route_localnet здесь есть. Теперь я вижу, что это именно то, что говорится в ответе Хуана Сеспедеса .
Мэтт Джоунер

31

это можно сделать с помощью iptables, но только с ядром> = 3.6.

Вам нужно будет сделать:

sysctl -w net.ipv4.conf.all.route_localnet=1
iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to 127.0.0.1:8080

ip_forwardне является необходимым, поскольку пакет не пересылается, но если вы не включите sysctl для route_localnet(который работает только в ядрах> = 3.6), пакет будет отброшен ядром, потому что он считает его "марсианским", приходя снаружи и с адресом назначения 127.0.0.1


Да, это работает
Ник Де Грек

Не знал про route_localnet. Такая старая школа и не могла понять, почему ip_forward не работал (подозревал, что это не нужно, но все равно пытался).
dmourati

1
Убедитесь , что вы сохраните net.ipv4.conf.all.route_localnet=1в /etc/sysctl.confпротивном случае он не будет стойким и после перезагрузки переменная будет вернуться к 0, в результате чего пакет упал. Тогда было бы очень трудно понять, почему сейчас все не работает ... это случилось со мной. ;)
именно

Извините за некро старый вопрос, но есть ли эквивалент ipv6 net.ipv4.conf.all.route_localnetдля использования с ip6tables?
Кебиан
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.