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.
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
vtoauntuk memperoleh alamat IP klien sebenarnya.
Akselerasi CDN: Permintaan layanan diteruskan oleh node akselerasi CDN ke server origin. Server origin dapat menggunakan
vtoauntuk memperoleh alamat klien sebenarnya.
Instalasi dan konfigurasi
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
getpeernamemenggunakan metode seperti eBPF, hal tersebut dapat bertentangan denganvtoadan menyebabkan perilaku tidak normal.Jika suatu aplikasi bergantung pada
getpeername, perilakunya mungkin terpengaruh.
Instalasi dan uninstal
Instal
sudo yum install vtoa -yCopot pemasangan
sudo yum remove vtoa -y
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 vtoaHentikan vtoa
sudo systemctl stop vtoaAktifkan vtoa untuk berjalan saat boot sistem
sudo systemctl enable vtoaNonaktifkan vtoa agar tidak berjalan saat boot sistem
sudo systemctl disable vtoaPeriksa 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
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
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/portdalam network byte order0 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/portdalam network byte order0 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.