All Products
Search
Document Center

Alibaba Cloud Linux:Gunakan vtoa untuk mendapatkan alamat client sebenarnya setelah translasi alamat

Last Updated:Feb 04, 2026

Dalam skenario FullNAT, seperti pada Anti-DDoS Proxy, alamat klien diterjemahkan menjadi alamat node FullNAT. Server backend yang telah menginstal vtoa pada Alibaba Cloud Linux 3 (versi kernel 5.10.134-15 atau lebih baru) dapat menggunakan TCP Option Address (TOA) untuk memperoleh alamat klien sebenarnya dengan memanggil getsockopt atau getpeername. Fitur ini mendukung IPv4 maupun IPv6.

Batasan

Persyaratan sistem: Alibaba Cloud Linux 3, versi kernel 5.10.134-15 atau lebih baru.

Catatan

Jalankan perintah uname -r untuk memeriksa versi kernel dari image tersebut.

Skenario

  • Anti-DDoS Proxy: Permintaan pengguna mengalami translasi alamat (FullNAT) di node forwarding, yaitu node Anti-DDoS dalam diagram. Anti-DDoS mengaktifkan mekanisme TOA, yang menyisipkan informasi alamat IP dan port klien sebenarnya ke dalam opsi TCP, lalu meneruskannya ke server origin backend. Server origin backend kemudian menggunakan vtoa untuk memperoleh alamat IP klien sebenarnya.

image
  • Akselerasi CDN: Permintaan layanan diteruskan oleh node akselerasi CDN ke server origin. Server origin dapat menggunakan vtoa untuk memperoleh alamat klien sebenarnya.

Instalasi dan konfigurasi

Peringatan

vtoa mengubah hasil yang dikembalikan oleh pemanggilan sistem getpeername, sehingga menimbulkan ancaman berikut. Pastikan Anda benar-benar membutuhkan fitur ini sebelum menginstalnya:

  • Jika komponen jaringan lain, seperti Cilium, mengubah hasil getpeername menggunakan metode seperti eBPF, hal tersebut dapat bertentangan dengan vtoa dan menyebabkan perilaku tidak normal.

  • Jika suatu aplikasi bergantung pada getpeername, perilakunya mungkin terpengaruh.

Instalasi dan uninstal

  • Instal

    sudo yum install vtoa -y
  • Copot pemasangan

    sudo yum remove vtoa -y
Catatan

Setelah instalasi, vtoa langsung berlaku dan secara default diaktifkan untuk berjalan otomatis saat boot sistem. Setelah uninstal, fitur vtoa dinonaktifkan.

Konfigurasi vtoa

Setelah instalasi, vtoa langsung berlaku dan secara default diaktifkan untuk berjalan otomatis saat boot sistem. Biasanya Anda tidak perlu mengonfigurasi vtoa secara manual.

  • Jalankan vtoa

    sudo systemctl start vtoa
  • Hentikan vtoa

    sudo systemctl stop vtoa
  • Aktifkan vtoa untuk berjalan saat boot sistem

    sudo systemctl enable vtoa
  • Nonaktifkan vtoa agar tidak berjalan saat boot sistem

    sudo systemctl disable vtoa
  • Periksa status vtoa

    systemctl status vtoa

Memperoleh alamat client sebenarnya

Setelah Anda mengaktifkan vtoa, Anda dapat memperoleh alamat klien sebenarnya menggunakan pemanggilan sistem getsockopt atau getpeername.

(Direkomendasikan) Gunakan pemanggilan getsockopt

Penting

Fitur ini memerlukan versi kernel 5.10.134-17 atau lebih baru. Anda dapat menjalankan perintah uname -r untuk memeriksa versi kernel.

vtoa menyediakan optname baru untuk memperoleh alamat klien sebenarnya. Bidang statisnya adalah 1348. Contoh kode C berikut menunjukkan cara penggunaannya.

struct sockaddr caddr;
int optlen = sizeof(caddr);
int optname = 1348;

getsockopt(fd, IPPROTO_IP, optname, &caddr, &optlen);
// caddr.sa_family dapat berupa AF_INET atau AF_INET6, yang masing-masing merepresentasikan alamat IPv4 dan IPv6.

Gunakan pemanggilan getpeername

Penting

Fitur ini didukung pada Alibaba Cloud Linux 3 (versi kernel 5.10.134-15 atau lebih baru). Fitur ini mungkin akan dihentikan di masa depan.

Setelah Anda mengaktifkan vtoa, pemanggilan tersebut akan mengembalikan informasi alamat klien sebenarnya. Contoh kode C berikut menunjukkan cara penggunaannya.

struct sockaddr caddr;
int caddr_len = sizeof(caddr);

getpeername(fd, &caddr, &caddr_len);
// caddr.sa_family dapat berupa AF_INET atau AF_INET6, yang masing-masing merepresentasikan alamat IPv4 dan IPv6.
// accept() juga dapat digunakan untuk memperoleh alamat client dengan cara serupa.

FAQ

Format opsi TOA yang didukung

Informasi alamat yang diurai oleh vtoa dibawa dalam TCP option. Opsi ini harus memenuhi persyaratan format tertentu. Jika TCP option tidak memenuhi persyaratan format tersebut, vtoa akan mengabaikannya. Hal ini tidak berdampak pada aplikasi dan setara dengan kondisi vtoa yang dinonaktifkan.

  • TOA (opcode = 254)

    opsize = 8, ip/port dalam network byte order

        0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |     opcode    |    opsize     |              port             |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                              ip                               |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • TOA_V6 (opcode = 253)

    opsize = 20, ip/port dalam network byte order

        0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |     opcode    |    opsize     |              port             |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                                                               |
       +                                                               +
       |                                                               |
       +                              ip                               +
       |                                                               |
       +                                                               +
       |                                                               |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Aktifkan vtoa dalam skenario kontainer

vtoa tidak mendukung pemagaran tingkat kontainer.
Dalam skenario kontainer umum, seperti runtime containerd ACK, instal vtoa pada host. Dengan demikian, fitur tersebut berlaku untuk semua kontainer pada node tersebut. Oleh karena itu, instal vtoa pada host, bukan di dalam kontainer.