Таким образом, я хотел бы, чтобы трафик устройства Tun пересылался туда и обратно через другой сетевой интерфейс, который имеет подключение к Интернету. Хотя я вижу, что трафик выходит в Интернет и возвращается, он не перенаправляется обратно на мое устройство Tun.
Вот мои настройки:
У меня очень простая установка с использованием виртуальной машины Mint Linux 15 под VirtualBox с Win7 в качестве хоста.
Внутри виртуальной машины есть два сетевых интерфейса - eth0 и tun0.
- Интерфейс eth0 подключен к Интернету и назначен как 192.168.1.115/24.
Интерфейс tun0 назначен как 10.0.5.1/24.
ip tuntap add dev tun0 mode tun user askldjd ip link set tun0 up ip addr add 10.0.5.1/24 dev tun0
Я установил правило iptables для маскировки всего трафика, проходящего через eth0.
iptables -I FORWARD -i tun0 -o eth0 -s 10.0.5.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
Я проверил правило, используя простой ping -I
. Так что в некоторой степени мои приемлемые правила работают.
ping -I 10.0.5.1 google.com
PING google.com (74.125.228.65) from 10.0.5.1 : 56(84) bytes of data.
64 bytes from iad23s07-in-f1.1e100.net (74.125.228.65): icmp_req=1 ttl=55 time=7.46 ms
Мой следующий шаг - создать пакет запроса ICMP с src = 10.0.5.1 и dst = 74.125.228.6 (google.com). Это было сделано с помощью захвата tcpdump, поэтому я знаю, что все поля / контрольная сумма пакета действительны. И я отправляю этот пакет в необработанный IP-сокет с помощью очень простого скрипта Python.
- Python send_packet.py: http://pastebin.com/Xh5YgsAx
Перед запуском скрипта Python я настроил tshark для мониторинга eth0 и tun0.
tshark -i eth0
tshark -i tun0
Затем я запускаю скрипт. В консоли tshark я вижу, что отправляется ICMP-запрос и ICMP-ответ возвращается из Google.
1811.947250 192.168.1.115 -> 74.125.228.6 ICMP 98 Echo (ping) request id=0x0990, seq=1/256, ttl=64
1811.955146 74.125.228.6 -> 192.168.1.115 ICMP 98 Echo (ping) reply id=0x0990, seq=1/256, ttl=55
А из окна tun0 tshark я ничего не вижу.
На мой взгляд, поскольку пакет запроса ICMP установлен как source = 10.0.5.1, я ожидал бы, что IPTable будет отменять ответ ICMP, когда он возвращается. Этого не происходит.
Так что либо мои настройки IPTables неверны, либо я просто неправильно понимаю концепцию устройства Tun. Любое руководство будет с благодарностью.
Я прошу прощения, если я неправильно использую любую терминологию. Я новичок, когда дело доходит до сетей.