Gunakan iptables untuk meneruskan ipv6 ke ipv4?

15

Saat ini saya memiliki pengaturan di mana, karena konfigurasi yang akan membutuhkan waktu lama untuk memperbaikinya, saya memiliki server yang hanya dapat diakses oleh ipv4. Saya juga memiliki server yang dapat diakses oleh ipv6. Saya bertanya-tanya apakah saya bisa menggunakan iptables untuk meneruskan lalu lintas ipv6 pada port tertentu dari salah satu server ke server lain menggunakan lalu lintas ipv4.

Eli
sumber
2
Apa yang Anda cari disebut NAT64, yang menurut saya tidak akan dilakukan iptables (belum).
Chris S
Chris benar - RFC NAT64 baru saja diterbitkan, saya akan memberikannya sebentar sampai semuanya benar-benar mendukungnya. Yang mengatakan, Anda mungkin dapat mencapai tujuan Anda dengan cara yang berbeda, tetapi kami tidak memiliki cukup detail untuk mengetahui dengan pasti. Misalnya, jika ini adalah server HTTP, Anda bisa membalikkan proxy permintaan antar protokol.
Shane Madden

Jawaban:

16

Saat ini IPtables tidak dapat melakukan ini, jadi Anda memerlukan proses userspace untuk mem-proxy koneksi. socat adalah alat yang cocok untuk ini:

socat TCP6-LISTEN:1234,fork TCP4:1.2.3.4:1234
Mgorven
sumber
1
terima kasih, ini sangat membantu! Jika ada yang mencari solusi UDP: socat UDP6-RECVFROM: 64444, fork UDP4-SENDTO: localhost: 64443 bekerja untuk saya
Alexander
10

Seperti disebutkan dalam komentar pada pertanyaan Anda , NAT64 jauh dari siap, bahkan 3 tahun kemudian.

Namun, Anda bisa mencoba 6tunnel, seperti yang disarankan oleh kebingungan.

Untungnya, ia ada di repositori Debian dan Ubuntu, sehingga Anda dapat menginstalnya dengan sangat mudah sudo apt-get install 6tunnel. Jika Anda menggunakan sistem lain, Anda harus membuatnya dari sumber .

Membangun dari sumber sebenarnya tidak sulit, dan hanya menjalankan beberapa perintah (sebagai root):

git clone https://github.com/wojtekka/6tunnel && cd 6tunnel && ./autogen.sh && make && make install

Berikut ini sintaksnya, disederhanakan:

6tunnel [-4|-6] [-l local-host] original-port destination-host destination-port
  • Ini [-4|-6]opsional dan memungkinkan Anda menentukan apakah Anda akan mengikat (mendengarkan) pada IPv4 atau IPv6 (masing-masing).
  • -ljuga opsional. Ini memungkinkan Anda memilih alamat mana (IPv4 atau IPv6) yang ingin Anda ikat.
  • The pelabuhan asli adalah port di mana Anda akan mengikat.
  • The host tujuan adalah di mana Anda akan meneruskan lalu lintas ke. Itu bisa di mana saja: localhost, atau di tempat lain di jaringan Anda atau di Internet.
  • The port tujuan adalah port pada host tujuan yang akan menerima lalu lintas diteruskan.

Misalnya, jika Anda ingin mengizinkan server khusus IPv4, mendengarkan pada port 1337, dapat diakses melalui IPv6, gunakan:

6tunnel -6 1337 localhost 1337

Perintah di atas akan mendengarkan pada port 1337 pada IPv6, dan meneruskan lalu lintas ke port 1337 pada mesin yang sama melalui IPv4. Ini kemudian akan berjalan di latar belakang, sehingga Anda tidak perlu khawatir tentang hal itu.

Sebenarnya, Anda harus mengatur pekerjaan cron untuk memastikan bahwa itu masih berjalan. 6tunnelmemberikan contoh untuk kenyamanan Anda! Menjalankannya saat boot juga bukan ide yang buruk.

Untuk dokumentasi lebih lanjut, jalankan 6tunnel -hatau man 6tunnel.

Léo Lam
sumber
Mempostingnya sebagai jawaban baru karena mengedit jawaban saat ini dengan bingung akan mengubah terlalu banyak, dan bisa ditolak sebagai edit yang disarankan!
Léo Lam
5

Versi terbaru dari xinetdjuga dapat mendengarkan pada IPv6 dan kemudian meneruskan koneksi ke alamat IPv4.

Konfigurasi sampel yang mendengarkan koneksi IPv6 pada port 3389 dan meneruskannya ke port 3389 dari alamat IPv4 internal:

service rdp_port_forward
{
    flags           = IPv6
    disable         = no
    type            = UNLISTED
    socket_type     = stream
    protocol        = tcp
    user            = nobody
    wait            = no
    redirect        = 10.187.20.42 3389
    port            = 3389
}

Ini mungkin berguna dalam lingkungan yang lebih terbatas karena xinetdkemungkinan akan diinstal dengan sistem pangkalan Anda atau tersedia di repositori vendor yang disetujui.

Michael Hampton
sumber
3

Saya ingin mengomentari jawaban dan dukungan Leo Lams, tetapi saya tidak memiliki reputasi yang cukup. Pertama-tama: Terima kasih banyak Leo Lam!

Bagi siapa pun yang mengikuti utas ini: ISP saya mengubah koneksi saya dari IPv4 ke IPv6 dengan Dual Stack Lite, yang berarti saya tidak memiliki alamat IPv4 saya sendiri lagi. Ini adalah masalah karena saya ingin mengakses Kamera IP saya dari mana pun yang tidak mendukung IPv6. Untuk mengatasi ini saya mencoba yang berikut:

  1. Mengaktifkan IPv6 Forward untuk port 99 di Router saya ke mesin Ubuntu saya.
  2. Mesin Ubuntu (jaringan rumah): sudo 6tunnel -6 99 192.168.178.35 80
  3. vServer Debian dengan alamat IPv4 dan IPv6 statis: sudo 6tunnel -4 99 IPV6PREFIXROUTER:IPV6INTERFACEIDUUBUNTUMACHINE 99
  4. vServer Debian: Izinkan koneksi tcp masuk pada port 99 di iptables

Awalan ipv6 dilambangkan di router saya dan antarmuka id dipetakan dalam proses penerusan IPv6.

Sekarang saya dapat mengakses kamera dari mana saja menggunakan domain vServer example.com:99 .. Sempurna! Saya berencana untuk mendapatkan raspberry yang akan memenuhi pekerjaan ini atau pisang pi m3 untuk tugas-tugas lain juga.

Crumar
sumber
1
Sekarang Anda tahu apa yang harus dilakukan ketika Anda membutuhkan kamera IP lain. Ini tahun 2015; membeli yang tidak mendukung IPv6 adalah buang-buang uang.
Michael Hampton
ini tidak seperti kamera yang berumur beberapa tahun: p
Crumar
2

Lebih untuk kepentingan orang menemukan halaman ini daripada OP (saya datang ke sini mencari solusi untuk konektivitas IPv6 untuk aplikasi IPv4 (Twisted)), satu kemungkinan adalah aplikasi 6tunnel, mendengarkan IPv6 dan meneruskan permintaan ke antarmuka lain dan Pelabuhan.

kebingungan
sumber