P route add: Недопустимое название — Xgu.ru

Содержание

Как распутать уроборос роутинга в Linux / Хабр

Описание проблемы


Ситуация: у нас имеется один интерфейс eth0, «смотрящий» в интернет, с IP-адресом 192.168.11.11/24 и шлюзом 192.168.11.1. Нам нужно организовать интерфейс vpn0, который будет через VPN соединяться с неким сервером, и весь исходящий с этой машины трафик должен идти через этот интерфейс vpn0.

Примечание: я оставляю за скобками детали работы с IPv6, поскольку там хватает своих особенностей. Рассматривается только ситуация с IPv4.

Итак, мы берём в руки программу для подключения в VPN-у — она соединяется с неким VPN-сервером по адресу 10.10.10.10 и поднимает нам интерфейс vpn0 например с таким адресом: 192.168.120.10/24, шлюз 192.168.120.1. Казалось бы, всё хорошо, пинги через vpn0 ходят, коннект есть, он стабильный, осталось только прописать нечто вроде

ip route add default dev vpn0 metric 1000


чтобы перенаправить все соединения через новый интерфейс и…

И всё благополучно падает. Пропадает интернет, отваливается VPN, отключается ssh (если вы по нему подключены к хосту). Если приложение VPN-а не выключит интерфейс при потере соединения, то извне вы до этого хоста до ребута больше не подсоединитесь.

Что случилось?

Прежде всего, небольшое предупреждение: данная статья, скорее всего, не будет являться чем-то новым для опытных системных администраторов. Однако, для тех кто не столь глубоко погружён в то, как работает роутинг в Linux, она может оказаться полезной. Впрочем, быть может второй способ решения этой проблемы, описанный здесь, будет интересен и тем, кто разбирался с ней, но более «статически».

О роутинге в общем


На самом деле, такое поведение было ожидаемо. Более того, часть популярных VPN приложений выполняют специальные действия, чтобы избежать ровно этой же проблемы. Проблема истекает из того, как именно работает роутинг.

Дело в том, что правила роутинга действуют на все пакеты, исходящие с хоста. И когда вы меняете default правила, пакеты VPN-приложения тоже начинают идти через новый интерфейс. Получается ситуация, которую можно вкратце описать словом «уроборос» — да-да, та самая мифическая змея, кусающая сама себя за хвост. VPN пытается соединиться со своим сервером через сам себя. Конечно же, это у него не получится.

Но это полбеды. Дело в том, что ещё и все исходящие пакеты, которые отправляются в ответ на входящие, также подчиняются роутингу. И даже если входящий пакет пришёл с одного интерфейса, то ответ ему может уйти вообще с другого. Для того, кто пытается подключиться извне отправленные и исходящие пакеты могут вообще приходить с разных IP-серверов, из-за чего он даже не сможет найти вообще эти ответы — ведь с точки зрения отправителя это будут абсолютно разные коннекты! Именно по этой причине вы не сможете подсоединиться по ssh к серверу, чтобы исправить ошибку.

Решение «в лоб»


Это решение, которое применяет большинство VPN-приложений в автоматическом режиме, и которое решает только и исключительно вопрос соединения с VPN-сервером.

Давайте просто добавим более специфическое правило роутинга до IP-адреса, на котором у нас находится наш VPN-сервер! По сути, нужно выполнить нечто вроде

ip route add 10.10.10.10 dev eth0


Теперь VPN-приложение больше не будет «кусать себя за хвост», потому что любые коннекты к VPN-серверу по адресу 10.10.10.10 будут безусловно направляться через eth0. Проблема, правда, в том, что и любые другие коннекты к 10.10.10.10 также не будут завёрнуты в VPN-соединение, но это не та проблема, которая сильно критична? Наверное?.. Может быть?.. Исключая очень редкие ситуации?..

Но есть одна проблема, которая никуда не исчезнет. Вы так и не сможете соединиться с сервером извне, только разве что обращаясь через тот же VPN к адресу 192.168.120.10, да и то это зависит от настроек этого самого VPN-сервера. То есть при соединении с VPN-сервером, вы опять потеряете ssh к этому хосту.

«Классическое» решение


Проблема эта не сказать что новая — она существует, наверное, со времён появления систем с двумя интерфейсами (неважно, реальными или виртуальными), но как ни странно, нагуглить решение хоть и получается, но не прямо «сходу». Лично я это решение нашёл вот в этой статье.

Суть заключается в использовании routing policy rules и отдельных правил роутинга для подобных ситуаций. В нашем случае:

  1. Создаём новую routing таблицу, которая по дефолту не будет использоваться для принятия решений по роутингу, и внесём в неё eth0 как default gateway. Так, в Linux можно сделать 4294967295 таких таблиц (в ядрах постарше, 2.2 и 2.4 — до 255 штук). Пусть наша таблица будет таблица номер 2:
    ip route add default via 192.168.11.1 dev eth0 src 192.168.11.11 table 2
  2. Создаём новые routing policy rule для применения этого правила ко всем соответствующим соединениям:
    # Использовать таблицу 2 для всех соединений, исходящих с IP
    ip rule add from 192.168.11.11/32 table 2
    # Использовать таблицу 2 для всех соединений, приходящих на IP
    ip rule add to 192.168.11.11/32 table 2
  3. О чудо, всё работает!


Суть этого решения в том, что только пакеты, которые не удовлетворили ни единому правилу, обрабатываются стандартной роутинг-таблицей. Те же, что удовлетворяют внесённым правилам о приходе или уходе пакетов с конкретного IP, обрабатываются таблицей 2 — где, как мы видим, eth0 всё ещё является default gateway.

Это решение отлично подходит в случае, если вы заведомо знаете IP-адрес eth0 и адрес его маршрутизатора — по сути подходит только для решений, сконфигурированных статически.

А что делать, если у вас, например, и eth0, и vpn0 получают информацию об IP и маршрутах по DHCP? То есть у вас полностью динамическая конфигурация? Нет, можно, конечно, использовать dhcpc вручную с кастомным скриптом настройки интерфейса, но, честно, это геморрой тот ещё. Особенно, когда вместо настройки «на коленке» хочется использовать systemd-networkd конфигурацию — у неё как раз есть DHCP-клиент. Возможно ли это? Да, возможно!

На помощь приходит iptables


Дело всё в том, что routing policy rules может применять правила не только на основании статических правил вроде IP-адреса. Нет, у него имеется ещё одна очень гибкая опция — fwmark. Эта опция позволяет принимать решения на основе решений, принятых netfilter-ом — в народе его чаще знают под именем iptables (хотя, я полагаю, аналогичный конфиг можно написать и на nftables). Достаточно с помощью iptables отмаркировать нужные нам пакеты и на основе этой маркировки отправить их на обработку в нужную routing таблицу!

  1. Так же как и в «классическом» варианте, настраиваем альтернативную routing-таблицу:
    ip route add default via 192.168.11.1 dev eth0 src 192.168.11.11 table 2
  2. Добавляем routing policy rule, который все пакеты с маркировкой «2» будет отправлять в эту таблицу:
    ip rule add fwmark 2 table 2
  3. А теперь самая сложная магия. Мы помечаем пакеты, пришедшие на eth0, либо ушедшие с eth0, маркировкой «2», и при этом сохраняем эту маркировку для всех связанных пакетов (ведь iptables — это stateful фаерволл, и мы можем на основании этого пометить все пакеты, относящиеся к одному соединению — для этого используется CONNMARK):
    # Сначала правила для входящих пакетов
    iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
    iptables -t mangle -A PREROUTING -m mark --mark 2 -j ACCEPT
    iptables -t mangle -A PREROUTING -i eth0 -j MARK --set-mark 2
    iptables -t mangle -A PREROUTING -j CONNMARK --save-mark
    # Затем правила для исходящих пакетов
    iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark
    iptables -t mangle -A OUTPUT -m mark --mark 2 -j ACCEPT
    iptables -t mangle -A OUTPUT -o eth0 -j MARK --set-mark 2
    iptables -t mangle -A OUTPUT -j CONNMARK --save-mark
  4. И вновь — всё работает!


Но позвольте, скажете вы, мы всё равно указывали в настройках адрес шлюза для eth0, а не использовал полученный от DHCP! Как же так?

Используем systemd-networkd файлы настройки


Да, я знаю, что далеко не все любят systemd, поэтому оставил это напоследок. Лично мне очень нравится возможность настроить интерфейсы при помощи *.network файлов, и сейчас я соединю все идеи, высказанные в этой статье в синтаксисе именно этих файлов. Мы не будем использовать ни единой команды ip, хоть нам всё ещё и понадобится настроить iptables-правила — один раз и «навсегда».

Также, именно такая конфигурация позволяет сформировать таблицу «2» в полностью автоматическом режиме, с подхватыванием настройки от DHCP.

  1. Конфигурация eth0 (eth0.network, размещается в /etc/systemd/network):
    [Match]
    Name=eth0
    [Network]
    DHCP=true
    # Определяем содержимое таблицы "2"
    # Поскольку мы не указываем Destination, по дефолту он считается как default
    # Ровно то что нам нужно!
    # Аналог команды ip route add default via <шлюз, полученный по DHCP> dev eth0 table 2
    [Route]
    Gateway=_dhcp4
    Table=2
    # А это - аналог команды ip rule add fwmark 2 table 2
    [RoutingPolicyRule]
    Table=2
    FirewallMark=2
  2. Конфигурация vpn0 (vpn0. network, размещается в /etc/systemd/network):
    [Match]
    Name=vpn0
    [Network]
    DHCP=true
    [DHCPv4]
    # Отключаем получение classless routes от DHCP
    # Если удалённый DHCP-сервер предоставляет classless routes,
    # DHCP-клиент игнорирует настройку default gateway, поэтому
    # нужно её принудительно отключить
    UseRoutes=false
    # Включаем настройку default gateway
    # По дефолту UseGateway = UseRoutes, но поскольку мы поменяли UseRoutes
    # необходимо включить обратно здесь
    UseGateway=true
    # По дефолту метрика - 1024 для default gw для всех интерфейсов,
    # ставим любую ниже чем 1024
    RouteMetric=1000
    [Link]
    # Это нужно чтобы хост при загрузке не подвисал, пытаясь настроить интерфейс,
    # которого ещё нет - он появится позже, при запуске VPN-клиента,
    # и автоматически подхватится systemd-networkd
    RequiredForOnline=no
  3. Конфигурация iptables-persistent правил (для Debian 11, при условии установленного пакета iptables-persistent) — перед выполнением убедитесь, что в настоящее время у вас нет активных правил iptables, которые вы НЕ хотите сохранять:
    iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
    iptables -t mangle -A PREROUTING -m mark --mark 2 -j ACCEPT
    iptables -t mangle -A PREROUTING -i eth0 -j MARK --set-mark 2
    iptables -t mangle -A PREROUTING -j CONNMARK --save-mark
    iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark
    iptables -t mangle -A OUTPUT -m mark --mark 2 -j ACCEPT
    iptables -t mangle -A OUTPUT -o eth0 -j MARK --set-mark 2
    iptables -t mangle -A OUTPUT -j CONNMARK --save-mark
    iptables-save > /etc/iptables/rules. v4
  4. Для применения изменений конфигурации, загрузите новые *.network-файлы:
    networkctl reload
  5. Всё работает!

Заключение


При желании, это решение можно расширить и на несколько интерфейсов аналогичным образом. Просто используйте раздельные table и fwmark-и для каждого отдельного интерфейса.

Надеюсь, эта статья сэкономит несколько седых волос в попытках понять, что происходит и как решить эту, пусть и достаточно простую, но почему-то не очень хорошо освещённую проблему одновременного использования нескольких интерфейсов.

Если существует ещё какое-то решение для динамических случаев (не через iptables) и совместимых с конфигурацией через systemd-networkd — буду рад их услышать.

А всем, кто боится systemd — рекомендую пересмотреть своё отношение к нему. Это штука мощная и позволяющая сильно упростить конфигурирование и читаемость этих конфигов. Да, она слабо соответствует принципу KISS и является своеобразным комбайном, но systemd сейчас всё равно уже ставится по умолчанию почти во всех популярных дистрибутивах.

Спасибо за внимание!

linux — Как огрничить ip route по интерфейсу?

У меня есть wireguard и сеть на eth0. я хочу, чтобы весь трафик ТОЛЬКО с eth0 был пропущен через wg0.
Но wg-quick мне впиливает ip route add 0.0.0.0/0 dev wg0.
Есть ли какой-то хак, чтобы ip route add 0.0.0.0/0 dev wg0 работал ТОЛЬКО на eth0?
Сейчас оно работает, но проводит весь трафик и текущей машины (если в консоле сделать curl google.com) и с eth0 (если зайти в гугл с ноута, который подключен по проводу)

интернет получаю из wlan0
подсеть eth0 192.10.0.1/24
подсеть wg0 192.11.0.1/24

PS 169.254.0.0/16 от дефолтного конфига eth0. не стал удалять, чтобы было на что откатиться.

Общая инфа по сети:

$ ip route
default via 192.168.0.1 dev wlan0 proto dhcp metric 600
169.254.0.0/16 dev eth0 scope link metric 1000
192. 10.0.0/24 dev eth0 proto kernel scope link src 192.10.0.1 metric 2048
192.11.0.0/24 dev wg0 proto kernel scope link src 192.11.0.2
192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.104 metric 600
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> 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
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 81:81:81:81:81:81 brd ff:ff:ff:ff:ff:ff
    inet 192.10.0.1/24 brd 192.10.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::81:cbff:fe3f:3e78/64 scope link
       valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 12:12:12:12:12:12 brd ff:ff:ff:ff:ff:ff
    inet 192. 168.0.104/24 brd 192.168.0.255 scope global dynamic noprefixroute wlan0
       valid_lft 7228sec preferred_lft 7228sec
    inet6 fe80::5999:c242:35b3:d9f/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
17: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 192.11.0.2/24 scope global wg0
       valid_lft forever preferred_lft forever
  • linux
  • сеть
  • wireguard

Интерфейс в новую табличку:

ip rule add iif eth0 table 100
ip route add  0.0.0.0/0 dev wg0 table 100







Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации



Почта

Необходима, но никому не показывается




By clicking “Отправить ответ”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.


Команда добавления маршрута в Linux

В этом руководстве объясняется, как использовать команду route и как ее использовать в Linux для администрирования соединения между различными сетями.

Этот документ позволяет подключаться к сетям с помощью методов маршрутизации (статическая, по умолчанию и динамическая) и методов командной строки (IP и добавление маршрута).

В Linux Hint мы оптимизируем наш контент как для новых, так и для опытных пользователей, переходя прямо к делу с практическими примерами для опытных пользователей и подробно объясняя каждый шаг новым пользователям вместе с примерами. Наш учебник требует, чтобы мы начали с теоретического содержания перед практическими примерами. Если вы опытный пользователь, разбирающийся в маршрутизации и нуждаетесь только в практических инструкциях, просто прокрутите вниз до практического раздела или нажмите здесь.

Все шаги, описанные в этом руководстве, снабжены снимками экрана, что позволяет каждому пользователю Linux понять, как они применяются.

Введение в таблицы маршрутизации

Таблицы маршрутизации — это сетевые инструкции, в которых мы указываем, как сетевые устройства могут получить доступ к другой сети. Например, если у нас есть сеть 192.168.0.0 и сеть 10.0.0.0, мы можем использовать таблицы маршрутизации, чтобы разрешить подключение обеих сетей. Для достижения связности мы указываем путь (маршрут) пакетов, которые должны следовать через таблицы маршрутизации. Например, наша таблица маршрутизации может определить, какие маршрутизаторы должны быть доступны для связи с различными сетями.

Команда, которую вы ищете, route add, — это команда для взаимодействия с таблицей маршрутизации, команда для добавления правильных маршрутов для достижения пункта назначения или нескольких пунктов назначения. Вы можете добавить более одного шлюза для доступа к разным сетям в зависимости от выбранного метода маршрутизации, описанного ниже.

Также важно знать, что сетевые устройства, обеспечивающие связь между двумя сетями, называются «шлюзы ». Шлюзы должны иметь две сетевые карты, каждая из которых подключена к сетям, которые мы хотим соединить между собой.

Статическая, стандартная и динамическая маршрутизация

Существует три различных метода реализации сетевой маршрутизации: статический, стандартный и динамический. Каждый из них имеет свои преимущества и недостатки в зависимости от топологии сети и знаний. Они описаны ниже в этой статье.

Статическая маршрутизация

Статические маршруты являются наиболее специфичными. Статический маршрут означает, что обе сети должны настроить свои сетевые устройства (одно за другим), указав полный путь (маршрут), которому должно следовать каждое устройство из каждой сети, чтобы добраться до другой сети. Важно понимать, что при использовании статического маршрута все устройства, такие как компьютеры, необходимо настраивать вручную.

Допустим, у вас есть две разные сети, каждая со своим маршрутизатором: сеть 192.168.1.x и сеть 10.0.0.1. 192.168.1.0 (сеть A) и 10. 0.0.1 (сеть B) хотят соединиться между собой.

Предположим, что клиент из сети A хочет подключиться к сети B. В этом случае он должен указать в таблице маршрутизации сетевой пункт назначения (B) и все маршрутизаторы (шлюзы), через которые ему необходимо пройти, чтобы достичь сети B. Если сеть B хочет подключиться к сети A, каждый клиент сети B также должен быть настроен взаимно. Автоматических обратных соединений нет.

Это означает, что если у нас есть сеть с маршрутизатором каждый и промежуточным третьим маршрутизатором, нам необходимо настроить наши клиентские ПК, указав сетевой интерфейс или сетевой адрес и сетевую маску, которую локальный маршрутизатор должен использовать для связи со следующим маршрутизатором (т. промежуточный маршрутизатор, третий). Поскольку промежуточный маршрутизатор не подключен напрямую к сети назначения, клиент также должен добавить в таблицу маршрутизации следующий маршрутизатор, за которым должен следовать промежуточный маршрутизатор, пока не достигнет сети назначения. Последний маршрутизатор не нужно настраивать, поскольку он уже напрямую подключен к сети назначения.

Как было сказано ранее, устройства маршрутизации должны иметь две сетевые карты или интерфейсы для связи с обеими сетями.

В качестве примера возьмем изображение ниже. Если компьютер из СЕТИ 1 хочет подключиться к компьютеру из СЕТИ 2 с использованием статической маршрутизации, компьютер из СЕТИ 1 должен указать в таблице маршрутизации, что оба выходных интерфейса, МАРШРУТИЗАТОР 1 и Промежуточный маршрутизатор, необходимо использовать для подключения к следующему маршрутизатору до достижения конечного пункта назначения.

При использовании статической маршрутизации компьютер также должен определить исходящий интерфейс для подключения к промежуточному маршрутизатору и интерфейс, который промежуточный маршрутизатор должен использовать для подключения к маршрутизатору, принадлежащему СЕТИ 2 . Однако маршрутизатор NETWORK 2 не нужно указывать в таблице маршрутизации, поскольку он уже подключен непосредственно к месту назначения.

Если клиент из СЕТИ 2 хочет подключиться к СЕТИ 1 (обратной), ему также потребуется добавить обратный маршрут или путь (включая его маршрутизатор, но без включения NETWORK 1 маршрутизатор, который уже подключен к NETWORK 1 ).

Статические маршруты — самый быстрый и безопасный метод маршрутизации. Это быстро, потому что клиенты предоставляют маршрутизирующим устройствам полный путь, а маршрутизаторы должны сами узнавать их другими способами.

И это безопасно, потому что системные администраторы обладают полным знанием топологии сети, и пакеты проходят точно по заданному маршруту (Path).

Наиболее существенным недостатком статической маршрутизации является то, что каждый клиент должен быть настроен вручную, что нецелесообразно для больших сетей.

Он называется «статическим», потому что каждый клиент заранее определяет маршруты.

Маршрутизация по умолчанию

В то время как для статических маршрутов требуется, чтобы клиент добавил полный путь к месту назначения, для маршрута по умолчанию требуется только добавить в таблицу маршрутизации второй переход после локального маршрутизатора. Второй маршрутизатор без указаний из сетевой таблицы отправляет пакеты следующему узлу или маршрутизатору, надеясь, что он решит пункт назначения или перенаправит пакет другому маршрутизатору, который, возможно, сможет определить цель. Этот процесс повторяется до тех пор, пока место назначения не будет определено, если только некоторые маршрутизаторы не могут направить пакет на другое устройство. В таком случае пакет отбрасывается.

Маршрут по умолчанию не обязательно заменяет статическую или динамическую маршрутизацию, но остается последним ресурсом, если пункт назначения не определен посредством статической или динамической маршрутизации. Действительно, маршрут по умолчанию также называют «последним ресурсом». Иногда у вас может быть только шлюз по умолчанию, например, когда мы подключаемся к Интернету. Затем соединение продолжается как динамическое.

Динамическая маршрутизация

Динамическая маршрутизация — это когда нет таблиц маршрутизации, а маршрутизаторы обмениваются или делятся всей своей информацией с другими маршрутизаторами. Они изучают топологию сети, обмениваясь информацией. Как было сказано ранее, при использовании статических маршрутов пакет отбрасывается, если какой-либо маршрутизатор, указанный в пути, недоступен. В отличие от статической маршрутизации, динамическая в таких случаях ищет альтернативу, так как не имеет предопределенного маршрута.

Практическое знакомство с командой Route

Прежде чем добавлять или удалять таблицы маршрутизации, давайте посмотрим, как распечатать существующие маршруты. Вы можете сделать это, запустив IP-маршрут или команды маршрута с правами суперпользователя, как показано ниже.

Примечание . Чтобы использовать команду sudo route add, необходимо установить пакет сетевых инструментов .

sudo ip route

На снимке экрана выше показано, что шлюзом по умолчанию является мой маршрутизатор с IP-адресом 19.2.168.0.1, подключенный через устройство wlp3s0 и получающий IP-адрес от DHCP.

Вторая и третья строки не имеют значения. Вторая генерируется в случае проблемы с назначением IP, а ядро ​​назначает третью строку.

Если на вашем компьютере установлен пакет сетевых инструментов , вы также можете выполнить следующую команду, чтобы просмотреть существующие таблицы.

sudo route

Команда добавления маршрута в Linux для статической маршрутизации

route add -net <Сетевой адрес назначения> netmask <Сетевая маска> gw <Адрес шлюза> dev <Интерфейс>

Следовательно, если мой IP-адрес 192.168.0.103, и я хочу подключиться к сети 192.168.1.0, т.е. Подключен через маршрутизатор (с двумя интерфейсами) с IP -адресом 192. 168.3.0, запустите команду, показанную на следующем рисунке:

route add -net 192.168.1.0 Netmak 255.255.255.0 GW 192.168.3.0

Вы можете сделать то же самое с IP-команда со следующим синтаксисом.

ip route add 192.168.1.0 via 192.168.3.0 dev wlp3s0

Команда добавления маршрута для определения шлюза по умолчанию в Linux

Синтаксис показан ниже, если вы хотите добавить шлюз по умолчанию с помощью команды route add.

route add default gw   <Интерфейс>

Если я хочу добавить шлюз по умолчанию для доступа в Интернет, а мой маршрутизатор имеет IP-адрес 192.168.0.1, я бы выполнил следующую команду:

route add default gw 192.168.0.1 wlp3s0

То же самое можно сделать с помощью команды IP, показанной ниже:

sudo ip route add default через 192.168.0.1

Сохранение ваших изменений

Все изменения, которые вы make в таблице маршрутизации будет автоматически удален при перезагрузке или перезапуске сетевой службы.

Выполните следующую команду, чтобы сделать изменения таблицы маршрутизации постоянными в Debian или Ubuntu.

sudo nano /etc/network/interfaces

Добавьте следующую строку в конец экрана, показанного на предыдущем снимке экрана.

up route add -net <сеть назначения> netmask 255.255.255.0 gw <адрес шлюза> dev <интерфейс>

В системах CentOS вам необходимо отредактировать файл /etc/sysconfig/network-scripts и добавить следующую строку:

<Адрес назначения> через <Адрес шлюза> dev <Интерфейс>

Удаление таблиц маршрутизации в Linux

Если вы хотите удалить шлюз по умолчанию, вы можете выполнить следующую команду (на основе предыдущих примеров):

sudo route del default gw 192.168.0.1 wlp3s0

Или

sudo ip route delete default

Оба метода приемлемы.

Заключение

Как видите, разобраться в таблицах маршрутизации несложно, если у вас есть базовые сетевые знания. Со среднего уровня нет поводов избегать этой темы. Это может спасти вас, если вы попытаетесь подключиться к сети, не назначив вам IP-адрес с DHCP, требующим полной настройки вашего устройства с правильным IP-адресом и правильной таблицей маршрутизации. Важно сказать 9Команда добавления маршрута 0017 была заменена командой добавления IP-маршрута . Тем не менее, большинство системных администраторов по-прежнему используют первую команду из пакета net-tools (я рекомендую вам установить ее), которая включает в себя дополнительные функции, такие как команда ifconfig. Многие пользователи считают методы net-tools более простыми. Другие также предпочитают его, несмотря на то, что команда IP реализует дополнительные функции. Важно то, что оба метода приемлемы и дают одинаковые результаты. Вам не нужно изучать их оба, если вы знаете, как читать их справочные страницы.

Справочная страница команды route : https://man7.org/linux/man-pages/man8/route.8.html

Справочная страница IP-маршрута : https://man7. org/linux/man -pages/man8/ip-route.8.html

Большое спасибо за чтение этой статьи, объясняющей таблицы маршрутизации и использование команды «добавление маршрута». Продолжайте следить за нами, чтобы получать больше профессиональных руководств по Linux.

Добавление маршрута в Linux

Linux — мощная операционная система, которая широко используется как в личных, так и в профессиональных целях. Одной из ключевых особенностей Linux являются его сетевые возможности, которые позволяют пользователям подключаться к Интернету и другим сетям. Одним из наиболее важных аспектов работы в сети в Linux является маршрутизация, которая определяет, как данные передаются из одной сети в другую. В этой статье мы обсудим, как добавить маршрут в Linux, включая некоторые примеры и подзаголовки.

Что такое маршрутизация?

Маршрутизация — это процесс пересылки пакетов данных из одной сети в другую. В контексте Linux под маршрутизацией понимается процесс направления пакетов данных с одного сетевого интерфейса на другой на основе их IP-адресов назначения.

Таблицы маршрутизации используются для хранения информации о доступных в системе маршрутах. Маршруты задаются как комбинация IP-адресов назначения, сетевых масок и шлюза (т. е. следующего перехода), который будет использоваться для пересылки пакетов. Таблица маршрутизации используется для определения наилучшего маршрута для каждого пакета на основе его IP-адреса назначения.

Зачем добавлять маршрут?

Существует несколько причин, по которым вам может понадобиться добавить маршрут в Linux:

  • Для подключения к удаленной сети: Если вам необходимо подключиться к удаленной сети, вам может потребоваться добавить маршрут к этой сети. Это особенно верно, если удаленная сеть не подключена напрямую к вашей локальной сети.
  • Для повышения производительности: Добавляя маршрут, вы можете повысить производительность вашей сети. Например, если у вас медленный канал связи с удаленной сетью, вы можете добавить маршрут, который отправляет данные по более быстрому каналу.
  • Для разрешения конфликтов маршрутизации: Если в таблице маршрутизации для одной и той же сети существует два или более маршрута, может возникнуть конфликт. Чтобы разрешить этот конфликт, вы можете добавить маршрут, чтобы указать предпочтительный маршрут.

Как добавить маршрут в Linux

Существует два метода добавления маршрута в Linux: с помощью команды route и с помощью команды ip.

Добавление маршрута с помощью команды Route

Команда route используется для управления таблицей маршрутизации в Linux. Чтобы добавить маршрут с помощью команды route, вам необходимо выполнить следующую команду от имени пользователя root:

 route add -net  netmask <маска сети> gw  

Например, чтобы добавить маршрут для сети 10.0.0.0/8 со шлюзом 10.1.1.1, вы должны запустить введите следующую команду:

 route add -net 10.0.0.0 netmask 255.0.0.0 gw 10.1.1.1 
Добавление маршрута с помощью команды IP

Команда ip является более новой и многофункциональной альтернативой команде route. Чтобы добавить маршрут с помощью команды ip, вам необходимо выполнить следующую команду от имени пользователя root:

 ip route add /<маска сети> через  

Например, чтобы добавить маршрут для сети 10.0.0.0/8 со шлюзом 10.1.1.1, вы должны запустить следующая команда:

 ip route add 10.0.0.0/8 через 10.1.1.1 
Добавление постоянного маршрута

Команды route и ip добавят маршрут в таблицу маршрутизации, но маршрут не сохранится после перезагрузки. Чтобы сделать маршрут постоянным, вам нужно добавить его в файл конфигурации маршрутизации, который обычно находится в /etc/network/interfaces.

Чтобы добавить постоянный маршрут с помощью команды route, вы можете добавить следующую строку в конец файла конфигурации:

 up route add -net  netmask <маска сети> gw  

Например, чтобы добавить постоянный маршрут для сети 10.0.0.0/8 со шлюзом 10.1.1.1, вы должны добавить следующую строку в конец файла конфигурации:

 up route add -net 10. 0.0.0 netmask 255.0.0.0 ГВт 10.1.1.1 

Чтобы добавить постоянный маршрут с помощью команды ip, вы можете добавить следующую строку в конец файла конфигурации:

 up ip route add /<маска сети> via  

Например, чтобы добавить постоянный маршрут для сети 10.0.0.0/8 со шлюзом 10.1.1.1, вы должны добавить следующую строку в конец файла конфигурации:

 up ip route add 10.0.0.0/8 via 10.1 .1.1 

После внесения изменений в файл конфигурации вам потребуется перезапустить сетевую службу, чтобы изменения вступили в силу. Вы можете сделать это, выполнив следующую команду от имени пользователя root:

 перезапуск сети службы 
Проверка маршрута

Чтобы убедиться, что маршрут был успешно добавлен, вы можете использовать команду route или ip для отображения таблицы маршрутизации.

Чтобы отобразить таблицу маршрутизации с помощью команды route, вы можете запустить следующую команду:

 route -n 

Чтобы отобразить таблицу маршрутизации с помощью команды ip, вы можете запустить следующую команду:

 ip route show 

В выходных данных будут показаны IP-адреса назначения, маски сети и IP-адреса шлюза для каждого маршрута в таблице маршрутизации.