Il seguente problema è solo un pezzo della soluzione più grande con cui ho un problema. Tutti gli altri elementi sembrano funzionare finora, quindi proverò a descrivere un pezzo molto piccolo con cui ho problemi.
Ho una macchina Linux, con tun0 (interfaccia tunneling) ed eth0 (la strega è il mio gateway predefinito per Internet).
Obiettivo: il mio obiettivo è ricevere pacchetti in arrivo da tun0 e inoltrarli al gateway predefinito. Quindi, in realtà, un caso NAT abbastanza semplice, in cui voglio "condividere" Internet con Tun0 che falsa l'interfaccia fisica.
Tun è stato creato usando
sudo openvpn --mktun --dev tun0 --user USER
sudo ip addr add 10.2.0.1/24 dev tun0
sudo ip link set tun0 up
Quindi ho installato e funzionante, posso eseguire il ping, ecc. Inoltre, ho un'applicazione C ++, che si collega a questo dispositivo TUN, in grado di leggere e scrivere su di esso. (fti: ecco un tutorial che ho seguito: http://backreference.org/2010/03/26/tuntap-interface-tutorial/ )
Ho scaricato alcune richieste ICMP (ping) corrette fatte a 8.8.8.8 nell'array di byte in C ++. Ora, usando il mio programma, lo scrivo sul dispositivo tun0. Richiesta ICMP ha
- source (10.2.0.10) - così il kernel conosce la route back (la stessa sottorete)
- destinazione (8.8.8.8) - DNS di Google
- checksum corretto ecc. (in Wireshark / TShark appare correttamente su tun0)
Quindi, ho i seguenti percorsi:
iptables -F # flush
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface tun0 -j ACCEPT
E qui sono bloccato :( Il pacchetto non viene inoltrato al gw predefinito (tshark lo vede solo su tun0 come ricevuto, suppongo sia corretto)
Cosa manca? Forse un approccio alternativo (ma deve essere fatto usando il dispositivo tun, e devo essere in grado di r / w ad esso). Informazioni addizionali:
- l'inoltro è abilitato (/ proc / sys / net / ipv4 / ip_forward)
- 8.8.8.8 è raggiungibile tramite eth0 (da locale)
- il gateway predefinito è corretto (dall'ISP tramite eth0)
- ho provato a spegnere rp_tables (echo 0> / proc / sys / net / ipv4 / conf / eth5 / rp_filter)
- e molti altri...
Grazie in anticipo per eventuali suggerimenti!