Наступна проблема є лише частиною більшого рішення, з яким я маю проблему. Всі інші елементи, здається, працюють поки що, тому я спробую описати дуже маленький фрагмент, з яким у мене є проблеми.
У мене є машина Linux, з tun0 (інтерфейс тунелювання) та eth0 (відьма - це мій шлюз до Інтернету).
Мета: моя мета - отримати пакети, що надходять з tun0, і переслати їх до шлюзу за замовчуванням. Так що насправді досить простий NAT випадок, де я хочу "поділитися" Інтернетом з tun0, який підробляє фізичний інтерфейс.
Tun створено за допомогою
sudo openvpn --mktun --dev tun0 --user USER
sudo ip addr add 10.2.0.1/24 dev tun0
sudo ip link set tun0 up
Таким чином, у мене він працює і працює, я можу його пінг і т. Д. Крім того, у мене є програма C ++, яка прикріплюється до цього пристрою TUN, може читати і записувати на нього. (fti: ось підручник, який я дотримувався: http://backreference.org/2010/03/26/tuntap-interface-tutorial/ )
Я скидав правильний запит ICMP (ping), зроблений до 8.8.8.8, у масив байтів у C ++. Тепер, використовуючи свою програму, я записую її на пристрій tun0. ICMP запит є
- джерело (10.2.0.10) - так ядро знає назад маршрут (та сама підмережа)
- призначення (8.8.8.8) - DNS Google
- правильна контрольна сума тощо (у Wireshark / TShark вона відображається правильно у tun0)
Потім у мене є такі маршрути:
iptables -F # flush
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface tun0 -j ACCEPT
І тут я застряг :( Пакет не пересилається до gw за замовчуванням (tshark бачить це лише на tun0 як отриманий, я думаю, це правильно)
Чого не вистачає? Можливо, якийсь альтернативний підхід (але це потрібно зробити за допомогою пристрою tun, і я повинен бути в змозі перейти на нього). Додаткова інформація:
- переадресація увімкнена (/ proc / sys / net / ipv4 / ip_forward)
- 8.8.8.8 доступний через eth0 (з локального)
- шлюз за замовчуванням правильний (від ISP через eth0)
- я намагався вимкнути rp_tables (ехо 0> / proc / sys / net / ipv4 / conf / eth5 / rp_filter)
- та багато інших ...
Заздалегідь дякую за будь-які підказки!