Я настроил устройство TUN на моем хост-компьютере, используя этот скрипт:
echo 1 > /proc/sys/net/ipv4/ip_forward
#do NAT on packets from our 'local' net
iptables -t nat --flush POSTROUTING
iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE
#initialise the tun device (tun0)
ip tuntap add dev tun0 mode tun
#give the tun device IP 10.0.0.1
ifconfig tun0 10.0.0.1 netmask 255.255.255.0 up
#disable IPv6 on tun device
sysctl net.ipv6.conf.tun0.disable_ipv6=1
#some firewall rules
iptables -A INPUT -i tun0 -d 127.0.0.0/8 -j DROP
Я пытаюсь отправить пакеты UDP с моего компьютера через Wi-Fi на мой ноутбук. Приложение, подключенное к устройству TUN, является серверным приложением, которое использует протокол, аналогичный SOCKS5, для приема отформатированных пакетов TCP, создания пакетов UDP/IP и отправки их по указанному адресу с созданным IP-адресом src (по некоторым причинам).
Отправка пакетов UDP через TUN с адресом src 10.0.0.2 работает нормально. Я могу получить его до 10.0.0.0/8, изменив маску сети, но когда я установил src (!) ip IP-пакета, который я хочу отправить через устройство TUN на 192.168.2.112 (фактический IP-адрес моего хоста), устройство TUN получит его, но на моем ноутбуке он не получен. Использование python для отправки дейтаграммы UDP обычно работает как положено, и на моем ноутбуке читается правильный IP-адрес src. Устройство TUN отправляет сконструированные пакеты, когда IP-адрес src находится в диапазоне 10.0.0.0/8, но не когда он равен 192.*.
Перед использованием скрипта iptables пуст на обеих машинах. Что мне не хватает?
/proc/sys/net/ipv4/conf/all/rp_filter: 1
/proc/sys/net/ipv4/conf/default/rp_filter: 1
/proc/sys/net/ipv4/conf/enp0s31f6/rp_filter: 1
/proc/sys/net/ipv4/conf/lo/rp_filter: 0
/proc/sys/net/ipv4/conf/tun0/rp_filter: 1
/proc/sys/net/ipv4/conf/wlp4s0/rp_filter: 1
/proc/sys/net/ipv4/conf/wwp0s20f0u3c2/rp_filter:1