Почему мое устройство TUN не отправляет UDP / IP на 192.168.2.x?

416
Minix

Я настроил устройство 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 
0
Этот скрипт запускается на вашем ноутбуке или другом компьютере? Какое программное обеспечение подключается к другому концу устройства настройки? Каковы значения `/ proc / sys / net / ipv4 / conf / * / rp_filter`? grawity 5 лет назад 0
@ Grawity Я обновил свой вопрос. Minix 5 лет назад 0

1 ответ на вопрос

1
dirkt

Повторим, ваше приложение генерирует пакет с некоторым адресом источника, помещает его в 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Д. На всех интерфейсах, которые могут быть интересны, чтобы увидеть, куда на самом деле идут пакеты.

Я возился со сценарием. В какой-то момент я изменил `eth0` на` wlp4so`, но не уверен, насколько еще я изменился. Я проверю, что вы предложили, когда я вернусь домой. Я не уверен, какую часть конфигурации я удерживаю, кроме исходного кода соответствующих программ. Minix 5 лет назад 0
Если маскарад был активен на wlp4so, когда он работал, то так и должно быть. Вероятно, вам нужно правило, маскирующее все, что идет от `tun` до` wlp4so`, независимо от того, какой адрес источника. Вам также может потребоваться принять обратное направление для существующих подключений в зависимости от политики по умолчанию. См. [Здесь] (https://www.revsys.com/writings/quicktips/nat.html) чистый пример. dirkt 5 лет назад 0
Кажется, что я изменил неправильную линию в неправильное время и не получил правильную комбинацию. После изменения интерфейса на `wlp4so` и сохранения IP-адреса src на` 10.0.0.2` он работает. Большое спасибо. Я узнал немного о NAT и `iptables` в процессе. Minix 5 лет назад 0

Похожие вопросы