Soluzione 1:
Quando aggiungi un instradamento a un host multihomed, potresti voler avere il controllo sull'indirizzo IP di origine da cui il tuo host sta inviando quando inizi le comunicazioni utilizzando questo instradamento. Questo è ciò che src è per.
Un breve esempio:hai un host con due interfacce e gli indirizzi IP 192.168.1.123/24 e 10.45.22.12/24. Stai aggiungendo un instradamento a 78.22.45.0/24 tramite 10.45.22.1 e vuoi assicurarti di non inviare a 78.22.45.0/24 utilizzando l'indirizzo 192.168.1.123 (forse perché la rete 78.22.45.0/24 non ha un instradamento di ritorno a 192.168.1.0/24 o perché non vuoi che il tuo traffico segua questo percorso per un motivo o per l'altro):
ip route add 78.22.45.0/24 via 10.45.22.1 src 10.45.22.12
Nota che il file src che stai dando influenzerebbe solo il traffico proveniente dal tuo stesso host. Se un pacchetto estraneo viene instradato, ovviamente avrebbe già un indirizzo IP di origine, quindi verrebbe trasmesso inalterato (a meno che tu non stia utilizzando NAT ovviamente, ma questa è una questione completamente diversa). Inoltre, questa impostazione potrebbe essere sovrascritta da un processo che sceglie specificamente di collegarsi a un indirizzo specifico invece di utilizzare le impostazioni predefinite quando si avviano le connessioni (piuttosto raro).
Soluzione 2:
Il src
l'attributo è un suggerimento utilizzato dall'algoritmo di selezione dell'indirizzo . È significativo quando un host ha più indirizzi IP, che di solito, ma non sempre, è quando ha più interfacce. Mentre ci sono altre regole che influenzano la selezione dell'indirizzo, e un'applicazione di rete può anche sovrascrivere l'algoritmo di selezione usando chiamate di sistema come bind()
, il src
L'attributo è un modo per utilizzare una ricerca nella tabella di routing per rispondere alla domanda "Se desidero avviare una connessione all'host X, quale dei miei indirizzi devo utilizzare?"
Ecco un esempio per illustrare l'uso e l'effetto del src
attributo. Per sottolineare che ciò è correlato a indirizzi e percorsi, non strettamente alle interfacce, questo host di esempio ha solo un'interfaccia di rete ma due indirizzi. Inoltre, entrambi gli indirizzi si trovano sulla stessa sottorete per sottolineare il fatto che non esiste un altro modo ovvio per scegliere quale utilizzare.
$ 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
Questo host può comunicare con uno qualsiasi degli altri 252 indirizzi su questa sottorete /24 da entrambi gli indirizzi, ma per impostazione predefinita utilizzerà 10.1.0.16 quando avvierà una connessione con 10.1.0.32 fino a 10.1.0.63 e utilizzerà 10.1.0.2 per tutto il resto.
Se l'host sta rispondendo, invece di iniziare, risponderà dall'indirizzo di destinazione della richiesta. Ad esempio, se un altro host su 10.1.0.32 si connette a questo host su 10.1.0.2, la risposta arriverà da 10.1.0.2 anche se non corrisponde a src
attributo della rotta di ritorno.