Я устанавливаю простую программу перехвата пакетов, используя два tuns, настраиваю так:
# ip tuntap add mode tun name tun0
# ip link set tun0 up
# ip addr add 10.0.0.0/31 dev tun0
# ip tuntap add mode tun name tun1
# ip link set tun1 up
# ip addr add 10.0.1.0/31 dev tun1
и перенаправить вывод в программу следующим образом:
# ip rule add fwmark 1 table 1
# ip route add default dev tun0 table 1
# iptables -t mangle -A OUTPUT --source 192.168.1.0 -o enp34s0 -p tcp --dport 9732 -j MARK --set-mark 1
# iptables -t nat -A POSTROUTING --source 10.0.1.1 -o enp34s0 -j MASQUERADE
Я включил ip_forward
и отключил rp_filter
. Пакеты, полученные tun0
, обрабатываются, модифицируются и обновляются контрольные суммы ip/tcp. Я даже могу корректно перехватить SYN -> ACK,SYN -> ACK
часть связи tcp handshake, но после этого любой входящий пакет будет корректно перехвачен, модифицирован и отправлен не в ту сторону, но никогда не будет доставлен локальному приложению.