iproute2 Наследование или копирование таблицы

Чтобы вернуться на один уровень каталога на основе пути к каталогу, а не ссылки .. :

cd $PWD:h

Или переносимый метод:

cd "${PWD%/*}"

(кавычки необязательны в zsh; кавычки необязательны в других оболочки, если имя каталога не содержит пробелов или \ [*? )

Повторите : h или / * столько раз, сколько хотите, чтобы пойти дальше по иерархии каталогов.

Или введите cd $ PWD , затем нажмите Tab , чтобы развернуть $ PWD до его значения и вручную отредактировать результат. (В зависимости от настроек завершения и редактора строк вам может потребоваться добавить / после $ PWD перед нажатием Tab , чтобы нажать клавишу, которую вы привязан к развернуть или завершить (по умолчанию Tab ) или префикс расширения или завершения или раскрыть слово (по умолчанию Ctrl + X * ).)

1
12.02.2018, 05:10
2 ответа

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

  1. создать новую таблицу маршрутизации, включающую «исключения», называемуюFOO
  2. добавить правило с условием, которое выбирает эту таблицуFOO
  3. поскольку правило получает более низкий (лучший )приоритет, новая таблица FOOсчитывается первой, таким образом обычно полностью игнорируя таблицу main. Чтобы «исправить» эту проблему, маршруты из таблицы mainкопируются в таблицу FOO.

Правила будут выглядеть так:

# ip rule 
0:  from all lookup local 
32765:  from 192.168.1.0/24 lookup FOO 
32766:  from all lookup main 
32767:  from all lookup default 

OP не хочет делать 3., потому что это увеличивает административную нагрузку при изменении маршрутов.

Насколько я понимаю, именно этого желает ОП:

  1. каждый локальный трафик должен обрабатываться обычными маршрутами из таблицыmain
  2. если трафик исходит от 192.168.1.0/24его маршрут по умолчанию должен быть взят из таблицыFOO(здесьdev eth0)
  3. В противном случае трафик будет использовать «обычный» маршрут по умолчанию.

Давайте реализуем это в таком порядке вместо обычного. Результат может быть не совсем таким, как описано в вопросе, но должен быть таким, как хотелось бы. Без фактической проблемы, которую нужно решить, и правильной конфигурации, заданной в OP, некоторые вещи могут показаться неудобными (, например повторное использование вывода ip routeдля перемещения маршрута по умолчанию из таблицы mainв таблицуdefault).

Исходя из обычных правил:

# ip rule
0:  from all lookup local 
32766:  from all lookup main 
32767:  from all lookup default 

Обратите внимание, что таблица defaultпуста (по умолчанию )и свободна для использования.

# ip route show table default
#
  1. переместить правило поиска вверх mainс более низким приоритетом

    # ip rule add priority 32000 from all lookup main
    # ip rule del priority 32766
    
  2. реализовать исключения

    # ip route add default dev eth0 table FOO
    # ip rule add priority 32100 from 192.168.1.0/24 lookup FOO
    
  3. переместить «обычный» маршрут по умолчанию из таблицы mainв таблицу default, чтобы разрешить запуск исключений в правиле 32100. Правило 32767 по-прежнему будет указывать маршрут по умолчанию из таблицы default, если совпадений не найдено. раньше потери связи не было.

    # ip route add $(ip route show 0.0.0.0/0) table default
    # ip route del default
    

Правила теперь будут выглядеть так:

# ip rule
0:  from all lookup local 
32000:  from all lookup main 
32100:  from 192.168.1.0/24 lookup FOO 
32767:  from all lookup default 

Несколько примеров в контейнере (, которые не будут иметь особого смысла, это просто для просмотра задействованных таблиц):

# ip -br link
lo               UNKNOWN        00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP> 
eth0@if12        UP             66:d4:11:94:49:5f <BROADCAST,MULTICAST,UP,LOWER_UP> 
local0@if9       UP             00:16:3e:6a:c1:e9 <BROADCAST,MULTICAST,UP,LOWER_UP> 
# ip -4 -br a
lo               UNKNOWN        127.0.0.1/8 
local0@if9       UP             10.0.3.66/24 
# ip route
10.0.3.0/24 dev local0 proto kernel scope link src 10.0.3.66 
# ip route show table FOO
default dev eth0 scope link 
# ip route show table default
default via 10.0.3.1 dev local0 

# ip -o route get 10.0.3.2
10.0.3.2 dev local0 src 10.0.3.66 \    cache 
# ip -o route get 8.8.8.8
8.8.8.8 via 10.0.3.1 dev local0 table default src 10.0.3.66 \    cache 
# ip -o route get 8.8.8.8 from 192.168.1.2 iif local0
8.8.8.8 from 192.168.1.2 dev eth0 table FOO \    cache  iif local0

Вот именно. Единственная разница в использовании заключается в том, что «обычный» маршрут по умолчанию теперь должен быть установлен в таблицеdefault(253)вместо таблицы main(254). Сценарии загрузки должны быть адаптированы для обработки этого :настройки не должны указывать маршрут или шлюз по умолчанию, но должны запускать дополнительный пользовательский сценарий, который будет делать ip route add default... table default. Для Debian это можно сделать с помощью post-upкоманд (, напримерpost-up ip route add default via xxx table default || :/etc/network/interfaces. Для RHEL7 это должно быть сделано с файлами route -XXX . Что касается новых сетевых методов systemd, я понятия не имею.

2
28.01.2020, 00:40

Просто добавьте

ip rule add from 192.168.1.0/24 table main suppress_prefixlength 0

Пакеты будут направляться в table mainи находить маршрут, но маршрут по умолчанию в table mainиспользоваться не будет.

Затем пакеты отправляются на table FOOи маршрутизируются на eth0.

1
05.01.2021, 15:59

Теги

Похожие вопросы