Tabela routingu jest używana w kolejności od najbardziej do najmniej określonej.
Jednak na Linuksie jest to trochę bardziej skomplikowane, niż można się spodziewać. Po pierwsze istnieje więcej niż jedna tabela routingu, a to, która tabela routingu jest używana, zależy od wielu reguł.
Aby uzyskać pełny obraz:
$ ip rule show
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
$ ip route show table local
broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
broadcast 192.168.0.0 dev eth0 proto kernel scope link src 192.168.1.27
local 192.168.1.27 dev eth0 proto kernel scope host src 192.168.1.27
broadcast 192.168.1.255 dev eth0 proto kernel scope link src 192.168.1.27
$ ip route show table main
default via 192.168.1.254 dev eth0
192.168.0.0/23 dev eth0 proto kernel scope link src 192.168.1.27
$ ip route show table default
$
local
Stół jest specjalna tabela routingu zawierające wysokie priorytetowych tras kontrolnych dla adresów lokalnych i sieciowych.
main
Stół jest normalna tabela routingu zawierającą wszystkie trasy bez polityki. To także tabela, którą zobaczysz, jeśli po prostu wykonasz ip route show
(lub ip ro
w skrócie). Odradzam używanie starej route
komendy, ponieważ pokazuje ona tylko main
tabelę, a jej format wyjściowy jest nieco archaiczny.
Tabela default
jest pusta i zarezerwowana do przetwarzania końcowego, jeśli poprzednie domyślne reguły nie wybrały pakietu.
Możesz dodać własne tabele i reguły, aby używać ich w określonych przypadkach. Jednym z przykładów jest, jeśli masz dwa połączenia internetowe, ale jeden host lub podsieć musi zawsze być kierowany przez jedno konkretne połączenie internetowe.
Książka Policy Routing with Linux objaśnia to wszystko wyjątkowo szczegółowo.