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

13

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

DankMemes
источник
Проблема в том, что при простом перенаправлении (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?
Кебиан