Solusi 1:
Saat menambahkan rute ke host multihomed, Anda mungkin ingin memiliki kontrol atas alamat IP sumber yang dikirim oleh host Anda saat memulai komunikasi menggunakan rute ini. Inilah yang src adalah untuk.
Contoh singkat:Anda memiliki host dengan dua antarmuka dan alamat IP 192.168.1.123/24 dan 10.45.22.12/24. Anda menambahkan rute ke 78.22.45.0/24 melalui 10.45.22.1 dan ingin memastikan Anda tidak mengirim ke 78.22.45.0/24 menggunakan alamat 192.168.1.123 (mungkin karena jaringan 78.22.45.0/24 tidak memiliki rute kembali ke 192.168.1.0/24 atau karena Anda tidak ingin lalu lintas Anda mengambil rute ini karena satu dan lain hal):
ip route add 78.22.45.0/24 via 10.45.22.1 src 10.45.22.12
Perhatikan bahwa src yang Anda berikan hanya akan memengaruhi lalu lintas yang berasal dari host Anda sendiri. Jika sebuah paket asing sedang dirutekan, itu jelas sudah memiliki alamat IP sumber sehingga akan diteruskan tanpa diubah (kecuali jika Anda menggunakan NAT tentu saja, tetapi ini adalah masalah yang sama sekali berbeda). Selain itu, setelan ini mungkin diganti oleh proses yang secara khusus memilih untuk mengikat ke alamat tertentu daripada menggunakan default saat memulai koneksi (agak jarang).
Solusi 2:
src
atribut adalah petunjuk yang digunakan oleh algoritme pemilihan alamat . Ini penting ketika sebuah host memiliki banyak alamat IP, yang biasanya, tetapi tidak selalu, ketika memiliki banyak antarmuka. Meskipun ada aturan lain yang memengaruhi pemilihan alamat, dan aplikasi jaringan juga dapat menggantikan algoritme pemilihan dengan menggunakan pemanggilan sistem seperti bind()
, src
atribut adalah cara menggunakan pencarian tabel perutean untuk menjawab pertanyaan, "Jika saya ingin memulai koneksi ke host X, alamat mana yang harus saya gunakan?"
Berikut adalah contoh untuk mengilustrasikan penggunaan dan efek dari src
atribut. Untuk menegaskan bahwa ini terkait dengan alamat dan rute, tidak hanya dengan antarmuka, host contoh ini hanya memiliki satu antarmuka jaringan tetapi dua alamat. Selain itu, kedua alamat berada di subnet yang sama untuk menekankan fakta bahwa tidak ada cara lain yang jelas untuk memilih mana yang akan digunakan.
$ ip -4 addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
inet 10.1.0.2/24 brd 10.1.0.255 scope global eth0
inet 10.1.0.16/24 scope global secondary eth0
$ ip route list dev eth0
10.1.0.32/27 scope link src 10.1.0.16
10.1.0.0/24 proto kernel scope link src 10.1.0.2
Host ini dapat berkomunikasi dengan salah satu dari 252 alamat lainnya pada subnet /24 ini dari salah satu alamat, tetapi secara default itu akan menggunakan 10.1.0.16 saat memulai koneksi dengan 10.1.0.32 hingga 10.1.0.63, dan menggunakan 10.1.0.2 untuk sisanya.
Jika tuan rumah merespons, bukan memulai, maka ia akan merespons dari alamat tujuan permintaan. Misalnya, jika host lain di 10.1.0.32 terhubung ke host ini di 10.1.0.2, respons akan datang dari 10.1.0.2 meskipun tidak cocok dengan src
atribut rute kembali.