Iptables переспрямовують на localhost?


12

Припустимо, у мене є мережа з сервером, який здійснює маршрутизацію всіх з'єднань з внутрішньої мережі до Інтернету. Як я можу налаштувати iptables, щоб замість маршрутизації вхідних з'єднань з Інтернетом він замість них направляв їх до порту localhost 8080. Вся допомога вдячна.


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

Не має значення, прозорі вони чи ні
DankMemes

Перенаправлення всього трафіку на проксі - це основа для прозорого проксі :)
pabouk

Ось ще одна відповідь, яка мені справді допомогла: unix.stackexchange.com/questions/111433/…
Wren T.

Відповіді:


5
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. І наступного разу, будь ласка, використовуйте кодові блоки, а не жирними.
DankMemes

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

@ZoveGames, вибачте, виправив це.
Олексій Антонов

2
Я експериментував з цим. Ip_forward sysctl не потрібен. Однак варіант route_localnet тут є. Тепер я бачу , що це саме те , що Хуан Сеспедес відповідь держави.
Метт Столяр

29

це можна зробити 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 for 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.