Как я могу взять весь трафик, предназначенный для определенного порта, с любого IP на любой IP и перенаправить его на локальный компьютер, сохранив исходный IP?

252
AppleDash

Я хочу взять весь трафик с любого IP-адреса на любой IP-адрес, исходящий из интерфейса enp4s5, предназначенный для порта 80, и перенаправить его на локальную машину (маршрутизатор, на котором работает iptables).

Служба, работающая на порте 80 локального компьютера (веб-сервер, если это не было очевидно из порта), должна иметь возможность знать исходный IP-адрес SOURCE соединения.

Вариант использования для встроенного портала Wi-Fi, который заменяет все страницы HTTP (я знаю, что это не будет работать для HTTPS) с перенаправлением на мою страницу входа в систему, работающую на маршрутизаторе, с которой они должны пройти аутентификацию (и затем добавит правило iptables или добавьте их адрес в ipset, который обходит это перенаправление).

Я почти уверен, что DNAT выполняет половину требуемой настройки, перенаправляя пакеты на локальную машину, но я застрял в том, что мне нужен соответствующий SNAT для отправки ответных пакетов обратно на машину, которая их первоначально отправила - но я я не могу этого сделать, потому что я не знаю IP-адреса источника, который нужно указывать в --to-source для правила SNAT.

2

1 ответ на вопрос

2
AppleDash

То, что помогло мне выполнить все вышеперечисленные требования, стало REDIRECTправилом:iptables -t nat -A PREROUTING -i enp4s5 -p tcp --dport 80 -j REDIRECT --to-port 80

Похожие вопросы