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!
Jawaban:
Solusi alternatif akan menggunakan
bridge
. Jadi Anda dapat menjembatani tun0 Anda dengan eth0 dan tidak perlu untuk nat atau pengaturan ip pada tun0 Anda hanya menempatkan IP dari subnet eth0 yang sama dan gateway yang sama yang Anda gunakan sekarang pada antarmuka terowongan klien.Perintah untuk mengatur jembatan:
www.tldp.org/HOWTO/BRIDGE-STP-HOWTO/set-up-the-bridge
sumber
Saya baru-baru ini mengalami masalah ini (mengikuti artikel yang sama disebutkan dalam pertanyaan) dan setelah mengutak-atik sedikit, saya menemukan bahwa perintah berikut ini memungkinkan penerusan lokal paket untuk perangkat tun.
Saya tahu ini sangat terlambat, saya hanya memposting di sini sehingga siapa pun yang menghadapi masalah yang sama dapat memiliki semacam bantuan.
sumber