Назад | Перейти на главную страницу

iptables port forward - получить исходный ip и порт

У меня есть роутер с LEDE. Там у меня есть настройка перенаправления портов по умолчанию в среде NAT. Когда пункт назначения получает запрос, исходный IP-адрес был перезаписан IP-адресом маршрутизатора, а исходный порт был переписан на случайный порт маршрутизатора. Было бы здорово сохранить исходный IP и порт. К сожалению, это кажется невозможным, когда мне нужно использовать NAT.

Теперь я ищу способ получить исходный IP-адрес и порт источника на основе замаскированного порта, открытого на маршрутизаторе. Теоретически это должно быть возможным, потому что это информация, которая записывается в ответный пакет. Есть ли команда, как это найти? Или мне придется переписывать iptables? Ищу что-то вроде этого:

$ iptables -t nat --lookup-masquerading-table --masqueraded-port 98765
Original Source-IP:      192.0.2.146
Original Source-Port:    7890
Original Dest-IP:        198.51.100.123
Original Dest-Port:      1234

Masqueraded Source-IP:   10.0.0.1
Masqueraded Source-Port: 98765
Masqueraded Dest-IP:     10.0.0.2
Masqueraded Dest-Port:   1234

Заранее спасибо!

Записи маскарадного NAT можно увидеть в /proc/net/ip_conntrack или /proc/net/nf_conntrack. В файле есть одна строка для каждого соединения, отслеживаемого IPTables. В каждой строке отображается информация об адресе / порте как для входящих, так и для исходящих пакетов для конкретного соединения.

Если входящий IP-адрес отличается от исходящего IP-адреса, то это NAT-соединение, и с него можно анализировать необходимую информацию.

Также есть инструмент netstat-nat, который обрабатывает описанный выше процесс и просто показывает соединения NAT, проходящие через устройство. Можно также дополнительно отфильтровать соединения с помощью параметров командной строки.