Я настроил устройство 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

1 ответ1

1

Повторим, ваше приложение генерирует пакет с некоторым адресом источника, помещает его в Tun-интерфейс, ваш хост-компьютер пересылает его, маскирует его на eth0 , а затем из eth0 он каким-то таинственным образом отправляется через WLAN на ваш ноутбук. Это работает для 10.0.0.2 в качестве источника, но не для 192.168.2.112.

Однако в действительности у вас нет интерфейса eth0 , но это enp0s31f6 , wlp4s0 и wwp0s20f0u3c2 .

Это правильно?

Если да, вероятный виновник в том, что вам нужно маскироваться на интерфейсе WLAN вместо eth0 , и вам нужно маскироваться для всех адресов источника, а не только для 10.0.0.0/8. Реальный вопрос заключается в том, как он работал в первую очередь для 10.0.0.2, но это, вероятно, объясняется частью вашей конфигурации, которую вы нам не сказали.

Скорее всего, вам придется маскироваться в WLAN, потому что в противном случае вам придется устанавливать маршруты в другой части вашей сети.

Инструменты для отладки: ip route get 1.2.3.4 для проверки маршрутов, tcpdump -ni wlp4s0 et.c на всех интерфейсах, которые могут быть интересны, чтобы увидеть, куда на самом деле идут пакеты.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .