Я использую iptables
его совместно с net-filter
очередью, чтобы программно изменять пакеты.
Я использую iptables
правила в лабораторной среде Ubuntu с двумя сетевыми картами: 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отвечатьили TCPАСКпакеты.
Они выходят в интернет, используя частный IP-адрес устройства локальной сети - 192.168.xx на eth1, и достигают другой стороны с этим частным IP-адресом источника.
Есть идеи? Спасибо.