Przeczytałem stronę podręcznika ip
i nadal nie rozumiem, co to src
jest, i nie mogłem znaleźć dużo dokumentacji.
Proszę, jeśli potrafisz to dokładnie wyjaśnić lub wskazać link, to dobra odpowiedź.
Przeczytałem stronę podręcznika ip
i nadal nie rozumiem, co to src
jest, i nie mogłem znaleźć dużo dokumentacji.
Proszę, jeśli potrafisz to dokładnie wyjaśnić lub wskazać link, to dobra odpowiedź.
Odpowiedzi:
Podczas dodawania trasy do hosta z wieloma domami możesz chcieć mieć kontrolę nad źródłowym adresem IP, z którego host wysyła dane podczas rozpoczynania komunikacji przy użyciu tej trasy. Po to jest src .
Krótki przykład: masz hosta z dwoma interfejsami i adresami IP 192.168.1.123/24 i 10.45.22.12/24. Dodajesz trasę do 78.22.45.0/24 przez 10.45.22.1 i chcesz się upewnić, że nie wysyłasz do 78.22.45.0/24 przy użyciu adresu 192.168.1.123 (być może dlatego, że sieć 78.22.45.0/24 nie ma trasy powrotnej do 192.168.1.0/24 lub ponieważ nie chcesz, aby Twój ruch podążał tą trasą z jednego lub drugiego powodu):
ip route add 78.22.45.0/24 via 10.45.22.1 src 10.45.22.12
Pamiętaj, że podany przez ciebie kod src wpłynie tylko na ruch pochodzący z twojego hosta. Jeśli obcy pakiet jest kierowany, to oczywiście miałby już źródłowy adres IP, więc byłby przekazywany w niezmienionej formie (chyba że używasz NAT, ale to zupełnie inna sprawa). Ponadto to ustawienie może zostać zastąpione przez proces specjalnie wybierający powiązanie z określonym adresem zamiast korzystania z ustawień domyślnych podczas inicjowania połączeń (raczej rzadko).
Ten src
atrybut jest wskazówką używaną przez algorytm wyboru adresu . Jest to istotne, gdy host ma wiele adresów IP, co zwykle jest, ale nie zawsze, gdy ma wiele interfejsów. Chociaż istnieją inne reguły, które wpływają na wybór adresu, a aplikacja sieciowa może również zastąpić algorytm wyboru za pomocą wywołań systemowych typu bind()
, src
atrybut ten jest sposobem na użycie wyszukiwania w tablicy routingu, aby odpowiedzieć na pytanie: „Jeśli chcę zainicjować połączenie z hostem X, którego z moich adresów powinienem użyć? ”
Oto przykład ilustrujący użycie i efekt src
atrybutu. Aby podkreślić, że jest to związane z adresami i trasami, a nie tylko z interfejsami, ten przykładowy host ma tylko jeden interfejs sieciowy, ale dwa adresy. Ponadto oba adresy znajdują się w tej samej podsieci, aby podkreślić fakt, że nie ma innego oczywistego sposobu wyboru, którego należy użyć.
$ 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
Ten host może komunikować się z dowolnym z pozostałych 252 adresów w tej podsieci / 24 z dowolnego adresu, ale domyślnie użyje 10.1.0.16 podczas inicjowania połączenia z 10.1.0.32 do 10.1.0.63 i użyje 10.1.0.2 dla wszystkich reszta.
Jeśli host odpowiada, a nie inicjuje, odpowie na adres docelowy żądania. Na przykład, jeśli inny host w 10.1.0.32 łączy się z tym hostem w 10.1.0.2, odpowiedź przyjdzie z 10.1.0.2, nawet jeśli nie jest to zgodne z src
atrybutem trasy powrotnej.