- Маршрутизация в Linux
- Сетевые маршруты в Linux
- Как посмотреть таблицу маршрутизации
- Настройка маршрутов в Linux
- Выводы
- How to check ip route in linux
- List *all* IP routes to a destination in the Linux routing table
- Understanding ip route output
- How to check what route (interface) does a destination IP address belong to without sending anything?
- View Network Routing Table Using the ip route Command in Linux Mint 20.3
- View Network Routing Table Using the “ip route” Command
- Adding New Routes
- Permanently Adding Routes in Linux
- Deleting Routes
- Adding a New Default Gateway
- Conclusion
Маршрутизация в Linux
Эта статья одна из статей про работу сетей в Linux. Вы уже знаете, что все данные в сети передаются в виде пакетов, а чтобы компьютер знал куда нужно отправить тот или иной пакет используются IP адреса. Но пакету, перед тем, как он достигнет точки назначения нужно пройти множество компьютеров и маршрутизаторов.
Каждому из маршрутизаторов нужно знать на какой компьютер передавать пакет дальше. Именно это мы и обсудим в этой статье. Сегодня нас будет интересовать маршрутизация в Linux, как это работает, как настроить правила и заставить все работать как нужно.
Сетевые маршруты в Linux
Как я уже сказал, сетевые маршруты необходимы чтобы компьютеры могли определить по какой цепочке должен пойти пакет, чтобы достигнуть цели. Маршруты можно настроить на уровне интерфейса или маршрутизатора.
Когда компьютеру нужно отправить пакет в сеть он смотрит таблицу маршрутизации, в ней указанны ip адреса пунктов назначения и адреса интерфейсов и роутеров в домашней сети, которые могут отправить пакет по нужному адресу. Если для цели маршрут не указан то используется так называемый шлюз по умолчанию или маршрут по умолчанию. Точно такая же картина наблюдается на роутере. Устройство смотрит на IP адрес назначения и сверяет его со своей таблицей маршрутизации, а потом отправляет дальше.
Ниже мы рассмотрим как проверить текущие маршруты в системе, а также как настроить новые.
Как посмотреть таблицу маршрутизации
Перед тем как что-либо менять, нужно понять какие правила уже используются. В Linux для этого существует несколько команд. Чтобы посмотреть таблицу маршрутизации можно использовать команду route:
Вот так выглядит таблица маршрутизации linux. Тут выводится достаточно простая информация, которой не всегда достаточно чтобы понять суть дела. Более подробно можно посмотреть с помощью команды routel:
Тут вы уже можете видеть IP адрес цели (target), IP адрес шлюза (gateway), IP отправителя (source), протокол, и даже сетевой интерфейс. Но самый удобный способ посмотреть таблицу маршрутизации linux — это команда ip:
Вывод похож на результат предыдущей команды, но выглядит не совсем привычно, это потому, что вывод команды можно использовать в качестве аргумента для ip route add или ip route del. Это очень удобно. Как вы видите, в качестве шлюза по умолчанию везде используется 192.168.1.1. Рассмотрим подробнее что означает вывод этой команды:
- default — в данной строке означает вариант по умолчанию. Здесь должен быть ip адрес цели или маска подсети;
- via 192.168.1.1 — указывает через какой шлюз мы можем добраться до этой цели, у нас это 192.168.1.1;
- dev enp2s0 — сетевой интерфейс, с помощью которого будет доступен этот шлюз;
- proto static — означает, что маршрут был установлен администратором, значение kernel значит что он был установлен ядром;
- metric — это приоритет маршрута, чем меньше значение — тем выше приоритет.
А теперь рассмотрим выполняется настройка маршрутов Linux.
Настройка маршрутов в Linux
Вы можете настраивать таблицу маршрутизации с помощью команды ip. Например, чтобы изменить маршрут по умолчанию достаточно выполнить:
ip route add default via 192.168.1.1
Так вы можете добавить маршрут для любого IP адреса, например, для 243.143.5.25:
sudo ip route add 243.143.5.25 via 192.168.1.1
Все очень просто, сначала указывается IP адрес цели, а затем шлюз в локальной сети, через который можно достичь этого адреса. Но такие маршруты будут активны только до перезагрузки, после перезагрузки компьютера они будут автоматически удалены. Чтобы маршруты сохранились их нужно добавить в файл конфигурации.
В операционных системах семейства Red Hat используются конфигурационные файлы /etc/sysconfig/network-scripts/route-ethX. Каждый файл может описывать несколько маршрутов, например:
GATEWAY=10.10.0.1
NETMASK=255.0.0.0
IPADDR=10.10.0.22
Здесь gateway — шлюз по умолчанию для этого интерфейса, netmask — маска сети, а ipaddr — ip адрес интерфейса. В Debian и основанных на нем дистрибутивах можно настроить маршруты в файле /etc/network/interfaces. Здесь команда route добавляется в секцию iface. Например:
up route add -net 10.10.0.0 netmask 255.0.0.0 gw 10.10.0.1
С помощью опции -net мы указываем целевую сеть, netmask — это маска сети, а gw — шлюз. Все очень просто. Теперь добавленные маршруты останутся даже после перезагрузки.
Выводы
В этой небольшой статье мы кратко рассмотрели как работает маршрутизация в Linux, как выполняется настройка маршрутизации в linux, а также зачем это нужно. Надеюсь, эта информация была полезной для вас.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
How to check ip route in linux
Add following entry for your static route: up route add -net < network-address >netmask < subnet-mask >dev < interface-name >Then, save and close the file and restart the network service: $ sudo systemctl restart network Deleting Routes To delete a route using the “ip route” command, use the previous syntax but replace the add option by del : $ sudo ip route del < network address >via < gateway_ip >dev < interface name >These routes are dynamic routes unless you have already added the static routes.
List *all* IP routes to a destination in the Linux routing table
There is an easy way to list all routes matchig prefix on linux :
ip -6 route list match 2607:f8b0:4005:804::200e table all
This will list all possible routes to specified target (including default, if no more specific is found) in all tables. Obviously, this works for IPv4 too.
PS: I know that my answer is a bit too late, and most likely you have figured this on your own already, but nevertheless — whoever hits this question may find it helpful 🙂
If I’m interpreting this right, you want to find out if a particular ipv6 address (google.com’s) is contained within a routing table entry (network/netmask), and print the route if it is.
- Acquire google.com’s ipv6 address, e.g. with host -t aaaa
- Get a list of all ipv6 routes. e.g. with ip -6 route show . or query your routing daemon for a list.
- For each ipv6 route, check if google.com’s ipv6 address is contained within that network and netmask.
The perl Net::CIDR module has a cidrlookup() function for checking if an IP address is in a net block (or array of net blocks) — it works with both ipv4 and ipv6 addresses. perl also has a Net::DNS module for doing DNS lookups, and probably has module(s) for fetching routing tables from various routers/routing-daemons — perl has a module (or two. or a dozen) to do almost anything you can think of. It’s easy enough to extract what you need from the output of ip -6 route show anyway.
NOTE: this will only find matches where there is a specific route in your routing table for a network/mask which contains your target IP. The «default» route contains every IP, of course.
If you prefer not to use perl , there’s also libcidr. Shouldn’t be too hard to write your own (or someone may already have done it).
List *all* IP routes to a destination in the Linux routing, There is an easy way to list all routes matchig prefix on linux : ip -6 route list match 2607:f8b0:4005:804::200e table all This will list all possible routes to specified …
Understanding ip route output
link-local (which I believe is my loopback device).
link-local (the 169.254.0.0/16 ) is a special subnet. Loopback device is «lo» and 127.0.0.1, and scope host and LOOPBACK (with ip a )
The other two lines of ip route show can be created with:
ip address add 192.168.0.16/24 dev eth0 ip route add 192.168.0.0/24 dev eth0 ip route add default via 192.168.0.1
This gives the same as this (dhcp), just the address is different (15 vs 16):
default via 192.168.0.1 dev eth0 proto dhcp src 192.168.0.15 metric 202 192.168.0.0/24 dev eth0 proto dhcp scope link src 192.168.0.15 metric 202
Some relevant links for those who stroll upon this question once answered
Understanding ip route output, Loopback device is «lo» and 127.0.0.1, and scope host and LOOPBACK (with ip a) The other two lines of ip route show can be created with: …
How to check what route (interface) does a destination IP address belong to without sending anything?
You could use the ip command:
# ip route get to 74.125.228.197 74.125.228.197 via 192.168.1.1 dev eth0 src 192.168.1.100
And once you know the interface you can get its index and link/ether(MAC) address:
# ip addr show eth0 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 100 link/ether 88:00:00:00:f2:4c brd ff:ff:ff:ff:ff:ff inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0 inet6 fe80::3039:34ff:fe2c:f24c/64 scope link valid_lft forever preferred_lft forever
Linux Route Command | Know Different Linux, Different Commands of Linux Route. Below are the Linux route commands: Command: route Options. It is a …
View Network Routing Table Using the ip route Command in Linux Mint 20.3
A routing table contains routing entries that determine where all packets go when they leave a router or a system. Usually, the Linux systems use dynamic routing, where the kernel decides which route out of multiple routes a packet should follow. However, you can also add static routes, which are not dynamically updated, if you want to forward specific traffic to a particular gateway or router.
In today’s article, we will cover how to view network routing tables using the “ip route” command in Linux Mint 20.3 OS.
Note : You need sudo privileges to make any changes in the routing table. However, viewing the routing table doesn’t need any sudo privileges.
View Network Routing Table Using the “ip route” Command
The “ip route” Command in Linux is used to view and modify the routing table. Using this command, you can add new routes to a particular network or host. You can delete the routes if you no longer want them in your routing table.
To view the network routing table in your Linux Mint, open the Terminal and run the following command:
In the output, you will see a list of network destinations and gateways. The gateways are the addresses where the packets are forwarded when they are moving toward their destination. These routes are dynamic routes unless you have already added the static routes.
Following is the output of the “ip route” command in our system. The 192.168.42.0 is the local network attached to the network interface ens33. The 192.168.42.2 is the default gateway. Any traffic not intended for the local network and is not defined in the routing table is forwarded to this address.
Adding New Routes
Using the “ip route” command, you can also add a new route for a specific network. Use the following syntax to add a new route in your system’s routing table:
For instance, the following command adds the route for the 10.0.0.0/24 network through gateway 192.168.42.2 to route it through the ens33 network interface.
Permanently Adding Routes in Linux
The static route added by the “ip route” command is not a persistent route. A persistent route stays in place even when you reboot your system. To permanently add the static routes and to make them persistent, you will need to add the entry in the /etc/network/interfaces file.
Edit the /etc/network/interfaces file through the following command:
Add following entry for your static route:
Then, save and close the file and restart the network service:
Deleting Routes
To delete a route using the “ip route” command, use the previous syntax but replace the add option by del :
Adding a New Default Gateway
Sometimes, you must add a new default gateway to your Linux system. The “ip route” command also allows you to add a new default gateway. Use the following syntax:
Conclusion
In this post, we reviewed how to view the network routing table using the “ip route” command in Linux Mint 20.3 OS. We also covered how to permanently add routes in Linux Mint so that they persist after reboot. Remember, this is not the only way to view the network routing table in Linux. You can also view the routing table using the “netstat” and “route” commands.
Linux — How to check what route (interface) does a, How to look up IP address in routing table (retrieve network interface index and MAC) without sending any packets there?