Проблема с NAT в Iptables и libnetfilter

Проблема с NAT в Iptables и libnetfilter

Я использую таблицы IP совместно с очередью net-filter для программного изменения пакетов.

Я использую правила iptables в лабораторной работе Ubuntu с 2 сетевыми картами eth0 для Интернета и eth1 для локальной сети. Я использовал известные правила iptables для NAT с маскарадингом на eth0. Sudo iptables --table nat --append POSTROUTING -o eth0 -j MASQUERADE sudo iptables -append FORWARD -i eth1 -j ACCEPT. sudo iptables -t mangle -A PREROUTING -j NFQUEUE --queue-num 0 Sudo iptables -t mangle -A OUTPUT -j NFQUEUE. Эти 4 правила помогают мне захватывать пакеты внутри моей программы и изменять пакеты или отбрасывать то, что я хочу, с помощью nfq_set_verdict. На самом деле все идет так, как я и ожидал, то есть пакеты трех типов протоколов icmp, tcp и udp модифицируются и повторно вставляются в очередь, затем выходят из eth0 в интернет, принимая eth0 IP-адрес в качестве исходного адреса (эффект использования правила MASQUERADE NAT). Это справедливо для всех пакетов, КРОМЕ: пакетов icmp ping reply или tcp ack. Они выходят в интернет, принимая частный IP-адрес устройства lan - 192.168.xx, и достигают другой стороны с этим частным IP-адресом источника. Есть идеи? Спасибо.

решение1

Я использую правила iptables в лабораторной работе Ubuntu с 2 сетевыми картами eth0 для Интернета и eth1 для локальной сети. Я использовал известные правила iptables для NAT с маскарадингом на eth0. Sudo iptables --table nat --append POSTROUTING -o eth0 -j MASQUERADE sudo iptables -append FORWARD -i eth1 -j ACCEPT. sudo iptables -t mangle -A PREROUTING -j NFQUEUE --queue-num 0 Sudo iptables -t mangle -A OUTPUT -j NFQUEUE. Эти 4 правила помогают мне захватывать пакеты внутри моей программы и изменять пакеты или отбрасывать то, что я хочу, с помощью nfq_set_verdict. На самом деле все идет так, как я и ожидал, то есть пакеты трех типов протоколов icmp, tcp и udp модифицируются и повторно вставляются в очередь, затем выходят из eth0 в интернет, принимая eth0 IP-адрес в качестве исходного адреса (эффект использования правила MASQUERADE NAT). Это справедливо для всех пакетов, КРОМЕ: пакетов icmp ping reply или tcp ack. Они выходят в интернет, принимая частный IP-адрес устройства lan - 192.168.xx, и достигают другой стороны с этим частным IP-адресом источника. Есть идеи? Спасибо.

Связанный контент