Masalah berikut ini hanyalah bagian dari solusi yang lebih besar yang saya punya masalah. Semua elemen lain tampaknya bekerja sejauh ini, jadi saya akan mencoba menggambarkan bagian yang sangat kecil yang saya punya masalah.
Saya punya mesin linux, dengan tun0 (antarmuka tunneling) dan eth0 (penyihir adalah gateway default saya ke internet).
Sasaran: tujuan saya adalah menerima paket yang masuk dari tun0, dan meneruskannya ke gateway default. Jadi sebenarnya kasus NAT cukup sederhana, di mana saya ingin "berbagi" internet dengan tun0 yang memalsukan antarmuka fisik.
Tun telah dibuat menggunakan
sudo openvpn --mktun --dev tun0 --user USER
sudo ip addr add 10.2.0.1/24 dev tun0
sudo ip link set tun0 up
Jadi saya memilikinya dan berjalan, saya bisa ping itu dll. Selanjutnya, saya punya aplikasi C ++, yang menempel pada perangkat TUN ini, dapat membaca dari dan menulis ke sana. (fti: ini tutorial yang saya ikuti: http://backreference.org/2010/03/26/tuntap-interface-tutorial/ )
Saya membuang beberapa permintaan ICMP (ping) yang benar yang dibuat ke 8.8.8.8 ke dalam byte array di C ++. Sekarang, menggunakan program saya, saya menulisnya ke perangkat tun0. Permintaan ICMP telah
- source (10.2.0.10) - jadi kernel tahu rute kembali (subnet yang sama)
- tujuan (8.8.8.8) - DNS Google
- mengoreksi checksum dll. (di Wireshark / TShark, ia muncul dengan benar pada tun0)
Lalu, saya memiliki rute berikut:
iptables -F # flush
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface tun0 -j ACCEPT
Dan di sini saya terjebak :( Paket tidak diteruskan ke gw default (tshark melihatnya hanya pada tun0 yang diterima yang saya kira itu benar)
Apa yang hilang Mungkin beberapa pendekatan alternatif (tetapi harus dilakukan dengan menggunakan perangkat tun, dan saya harus dapat r / w untuk itu). Informasi tambahan:
- penerusan diaktifkan (/ proc / sys / net / ipv4 / ip_forward)
- 8.8.8.8 dapat dicapai melalui eth0 (dari lokal)
- gateway default sudah benar (dari ISP via eth0)
- Saya sudah mencoba mematikan rp_tables (echo 0> / proc / sys / net / ipv4 / conf / eth5 / rp_filter)
- dan banyak lagi...
Terima kasih sebelumnya atas segala petunjuk!