- Команда IP в Linux: руководство с примерами
- Как использовать команду ip
- Управление и отображение сетевых интерфейсов
- Получить информацию о сетевом интерфейсе
- Изменить статус сетевого интерфейса
- Мониторинг и управление IP-адресами
- Мониторинг IP-адресов
- Как добавить IP-адрес в Linux
- Управление и отображение таблицы IP-маршрутизации
- Показать таблицу маршрутизации IP
- Изменить таблицу IP-маршрутизации
- Отображение и изменение IP-записей соседей
- Отображение IP-адресов соседей
- Изменить IP-записи соседей
- Linux IPv6 Route
- Showing Linux IPv6 Routes
- Add and Removing a Linux IPv6 Route
- References
- List *all* IP routes to a destination in the Linux routing table
- 2 Answers 2
Команда IP в Linux: руководство с примерами
Команда ip — это сетевой инструмент Linux для системных и сетевых администраторов. IP означает Интернет-протокол и, как следует из названия, инструмент используется для настройки сетевых интерфейсов. В старых дистрибутивах Linux использовалась команда ifconfig, которая работает аналогично. Однако ifconfig имеет ограниченный диапазон возможностей по сравнению с командой ip.
В этом руководстве мы рассмотрим все важные операции, которые команда ip может выполнять в Linux.
Как использовать команду ip
Команда ip имеет следующий синтаксис:
К объектам OBJECT (или подкомандам), которые вы будете использовать чаще всего, относятся:
- link (l) — используется для отображения и изменения сетевых интерфейсов
- address (addr/a) — используется для отображения и изменения адресов протокола (IP, IPv6)
- route (r) — используется для отображения и изменения таблицы маршрутизации
- neigh (n) — используется для отображения и управления соседними объектами (таблица ARP)
Они могут использоваться как в полной, так и сокращенной форме.
Есть много других доступных объектов и команд. Чтобы увидеть полный список, введите следующую команду:
Для выполнения команд вы можете использовать либо полную, либо сокращенную формы. Например, ip link и ip l будут давать одинаковые результаты.
При настройке сетевых интерфейсов вы должны запускать команды как пользователь root или пользователь с привилегиями sudo. В противном случае вы увидите сообщение RTNETLINK answers: Operation not permitted
Предупреждение: по умолчанию система не сохраняет изменения перманентно. После перезапуска Linux-сервера вновь измененное состояние будет потеряно. Есть два способа сделать ваши настройки постоянными: добавить команды в сценарий запуска или отредактировать дистрибутивные файлы конфигурации.
Управление и отображение сетевых интерфейсов
Вы можете получить список всех параметров команды link , набрав:
Получить информацию о сетевом интерфейсе
Чтобы увидеть информацию канального уровня обо всех доступных устройствах (у которых загружен драйвер), используйте команду:
1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 12:24:01:8c:67:45 brd ff:ff:ff:ff:ff:ff
Если вы хотите, чтобы команда отображала информацию для одного конкретного устройства, введите следующее:
Чтобы просмотреть статистику по всем сетевым интерфейсам (такие детали, как переданные или отброшенные пакеты или даже ошибки), используйте:
Вы также можете увидеть аналогичную информацию для отдельного сетевого интерфейса:
Если вам нужно больше подробностей, добавьте еще -s в синтаксис:
Чтобы увидеть список только работающих интерфейсов, используйте:
Изменить статус сетевого интерфейса
Если вы хотите включить сетевой интерфейс, используйте команду:
Отключите интерфейс, введя:
ip link set [interface] down
Команда ip link позволяет вам изменять очередь передачи, ускоряя или замедляя интерфейсы в соответствии с вашими потребностями и аппаратными возможностями.
ip link set txqueuelen [number] dev [interface]
Вы можете установить MTU (Maximum Transmission Unit) для улучшения производительности сети:
ip link set mtu [number] dev [interface]
Чтобы узнать все опции команды link, наберите:
Мониторинг и управление IP-адресами
Узнайте все команды address , набрав следующее:
Мониторинг IP-адресов
Выведите все устройства с помощью следующей команды:
Чтобы вывести список всех сетевых интерфейсов и связанных IP-адресов, используйте команду:
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 51:55:07:8a:62:44 brd ff:ff:ff:ff:ff:ff inet 192.168.120.24/24 brd 192.168.120.255 scope global dynamic eth0 valid_lft 2900sec preferred_lft 2900sec inet6 fe80::5054:ff:fe8c:6244/64 scope link valid_lft forever preferred_lft forever
Вы также можете увидеть информацию об отдельной сети:
ip addr show dev [interface]
Чтобы получить список всех IPv4 адресов, используйте:
Чтобы получить список всех IPv6 адресов, используйте:
Как добавить IP-адрес в Linux
Добавьте IP-адрес в интерфейс с помощью команды:
ip addr add [ip_address] dev [interface]
Если указанный интерфейс не существует, отобразится сообщение: Cannot find device [interface]
Чтобы добавить два адреса на один интерфейс также используйте эту команду:
ip address add 192.168.1.41/24 dev eth0 ip address add 192.168.1.40/24 dev eth0
Если вам нужно добавить широковещательный (broadcast) адрес для интерфейса, используйте команду:
ip addr add brd [ip_address] dev [interface]
Чтобы удалить IP-адрес из интерфейса, выполните следующие действия.
ip addr del [ip_address] dev [interface]
Управление и отображение таблицы IP-маршрутизации
Просмотрите полный список команд ip route с помощью следующей команды:
Показать таблицу маршрутизации IP
Для просмотра всех записей в таблице маршрутизации используйте одну из следующих команд:
default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.241 metric 100 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.241 192.168.1.1 dev eth0 proto dhcp scope link src 192.168.1.241 metric 100
С помощью команд, приведенных выше, выходные данные отображают все записи маршрута в ядре. Если вам нужно сузить поиск, добавьте объект SELECTOR :
Чтобы просмотреть маршрутизацию для отдельной сети, используйте следующий синтаксис:
Изменить таблицу IP-маршрутизации
Чтобы добавить новую запись в таблицу маршрутизации, введите команду:
ip route add [ip_address] dev [interface]
Или вы можете добавить новый маршрут через шлюз, набрав:
ip route add [ip_address] via [gateway_IP]
Также команда позволяет добавить маршрут для всех адресов через локальный шлюз, добавив параметр default :
ip route add default [ip_address] dev [device] ip route add default [network/mask] via [gateway_IP]
Чтобы удалить существующую запись в таблице маршрутизации, используйте команды:
ip route del [ip_address] ip route del default ip route del [ip_address] dev [interface]
Отображение и изменение IP-записей соседей
При помощи команды ip neigh можно манипулировать таблицами ARP (Address Resolution Protocol). Это аналог команды arp
Для получения полного списка всех параметров команды neigh используйте:
Отображение IP-адресов соседей
Чтобы отобразить таблицы соседей, используйте следующую команду:
Выходные данные показывают MAC-адреса устройств, которые являются частью системы, и их состояние. Состояние устройства может быть:
- REACHABLE — означает валидную, достижимую запись до истечения таймаута.
- PERMANENT — означает постоянную запись, которую может удалить только администратор
- STALE — означает действительную, но недоступную запись
- DELAY — означает, что ядро все еще ожидает проверки из устаревшей записи
Изменить IP-записи соседей
Добавьте новую запись в таблицу с помощью команды:
ip neigh add [ip_address] dev [interface]
Или удалите существующую запись ARP:
ip neigh del [ip_address] dev [interface]
Linux IPv6 Route
IPv6 is the future. Knowing how to add a Linux IPv6 route is an important skill. Not everybody is using IPv6 on their network. Often times people may not even be familiar with basic operations even though they are completely OK with IPv4.
We are going to use eth0 as the device name in most of our examples. The interface may be named differently. It could look something like this: enp0s25.
Showing Linux IPv6 Routes
There are a few different ways to view existing IPv6 routes on a Linux system.
You can show all IPv6 routes on your Linux system like this:
If you want to show your IPv6 routes them for a specific interface, for example eth0, you can specify it like this:
You can also do this using the route command.
If you want to filter based on a specific interface, you can grep for that interface name.
route -A inet6 |grep -w "eth0"
Add and Removing a Linux IPv6 Route
NOTE — Unless you are running as root, you will probably want to run these commands with sudo.
sudo ip -6 route add 2000::/3 via 2001:0db8:0:f101::1 sudo route -A inet6 add 2000::/3 gw 2001:0db8:0:f101::1
sudo ip -6 route add 2001:db8:0:1::0/64 dev eth0 sudo ip -6 route add 2000::/3 dev eth0 metric 1 sudo route -A inet6 add 2000::/3 dev eth0
sudo ip -6 route del 2000::/3 via 2001:0db8:0:f101::1 sudo route -A inet6 del 2000::/3 gw 2001:0db8:0:f101::1
sudo ip -6 route del 2001:db8:0:1::0/64 dev eth0 sudo ip -6 route del 2000::/3 dev eth0 sudo route -A inet6 del 2000::/3 dev eth0
References
List *all* IP routes to a destination in the Linux routing table
ip route get 2607:f8b0:4005:804::200e will show me the best (longest prefix) route to google.com , but it does not show all routes that can take me there. Right now I am using ip -6 route show | grep 2607:f8b0: . This prints the right routes, but it also prints every other route in that /32. There has got to be a better way.
do you mean the route that’s taken (which interface) out of the server, or once it’s on the capital-I Internet?
@JeffSchaller Both, I have a linux router connected to multiple upstreams and an IX leading to the Internet. These commands run on that router.
@RuiFRibeiro No, traceroute only shows 1 path via the longest prefix route. I’m looking for all possible 1st hops (gateways) in my routing table.
What routing program are you running? Usually only the best route gets installed in the kernel and that’s what you are seeing. To see all the candidate routes, you would need to ask the routing daemon. Until we know which, we can’t say how you do this (other than RTFM).
2 Answers 2
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).