Bagaimana cara memanfaatkan terowongan TUN / TAP dari program pengguna?

9

Baru-baru ini saya menemukan keberadaan antarmuka TUN / TAP Linux dan saya masih berusaha memahaminya. Saya pikir saya mendapatkan konsep dasar - perangkat pseudo dibuat yang meniru antarmuka jaringan dan alih-alih mengirimkan data ke perangkat keras itu diteruskan ke program userspace.

Bagaimana Anda mengarahkan program yang tidak terkait untuk memanfaatkan terowongan ini?

Misalnya, sebelum terowongan dibuat, sistem saya hanya berisi eth0 dan lo, antarmuka ethernet normal (kabel ke jaringan lokal saya) dan antarmuka loopback. Setelah sebuah program membuat dan mengkonfigurasi sebuah terowongan, saya memiliki antarmuka baru gr0 yang saya berikan alamat IP yang ada di jaringan lokal saya, tetapi tidak digunakan (jadi kita semua berada di subnet yang sama). Bagaimana saya membuat program yang tidak terkait memanfaatkan 'terowongan' ini? Katakanlah saya punya pesan Python sederhana yang melewati aplikasi klien / server yang menggunakan koneksi TCP, bagaimana saya bisa mengkonfigurasinya untuk menggunakan terowongan?

Saya minta maaf jika saya kehilangan sesuatu yang mendasar, tetapi seperti biasa saya telah berhasil membingungkan diri saya dalam skema hal-hal. Sekali lagi, yang saya inginkan adalah memiliki program TCP sederhana memanfaatkan terowongan ini.

Terima kasih!

Tuan Shickadance
sumber

Jawaban:

7

Itu tidak selalu "terowongan". TUN / TAP hanyalah driver NIC khusus. Dari sudut pandang tumpukan jaringan, mereka bertindak sebagai antarmuka jaringan lainnya: mereka dapat memiliki alamat IP, dapat berupa antarmuka titik-ke-titik atau siaran. Aturan perutean juga berlaku untuk mereka. Tetapi semua lalu lintas yang ditulis ke salah satu antarmuka jaringan pergi ke beberapa program userspace untuk diproses, dan semua data yang ditulis oleh program userspace secara langsung /dev/tunXtampak seperti paket yang masuk untuk tumpukan jaringan.

Di server setup tunneling biasa dan klien memiliki perangkat TUN dengan alamat yang ditetapkan. Tabel perutean yang dikonfigurasi pada keduanya mengarahkan lalu lintas yang diperlukan ke perangkat TUN ini. Ketika paket dialihkan ke tun0, kernel mengirimkannya ke program userspace (klien) yang mengirimkan paket ini ke program lain di mesin jarak jauh (server) melalui, misalnya, koneksi TCP. Pada mesin jarak jauh, program lain (server) menerima paket dari klien dan menulisnya ke /dev/tunXperangkatnya sendiri , "menyuntikkan" paket itu ke tumpukan jaringan. Dan paket tunneled diproses seperti yang lain.

gelraen
sumber
1
Jadi jawabannya (untuk tujuan saya) adalah mengkonfigurasi tabel routing untuk mengarahkan lalu lintas ke antarmuka ini. Itulah titik yang saya lewatkan, tetapi sekarang saya harus dapat menemukan solusi. Juga, saya menghargai penjelasannya karena sudah jelas. Terima kasih!
Tn. Shickadance
2
Saya akhirnya menggunakan "route add <TUN IP ADDR> dev gr0". Ini memungkinkan saya untuk mengarahkan lalu lintas melalui antarmuka baru. Terima kasih lagi!
Tn. Shickadance