❝Исходная ссылка🔗:https://icloudnative.io/posts/linux-routing-of-wireguard/ Или нажмите на левый нижний угол Прочитайте оригинальную статью Посмотреть исходный текст напрямую👇
Давным-давно нам просто нужно было Linux Войдите в терминал route -n
(Позже развился ip route
,То есть команда, предоставленная да iproute2),Вы можете узнать направление всех пакетов данных в системе.,Да,Сэр, времена изменились!
если ты WireGuard игроков, и весь трафик проходит через WireGuard выход, но ты не можешь пройти ip route
Любые подсказки можно увидеть в выводе команды:
default via 192.168.100.254 dev eth0 proto dhcp src 192.168.100.63 metric 100
192.168.100.0/24 dev eth0 proto kernel scope link src 192.168.100.63
192.168.100.254 dev eth0 proto dhcp scope link src 192.168.100.63 metric 100
таблица маршрутизация говорит нам, что весь трафик выходит через физическую сетевую карту и не проходит WireGuard Виртуальный сетевой интерфейс. Почему это?
фактически Linux от 2.2 Начиная с версии ядра около 10, оно содержит несколько таблиц маршрутизации,Скорее, чем один! в то же время,Также существует свод правил,Этот набор правил сообщает ядру, как выбрать правильную таблицу маршрутизации для каждого пакета.
когда вы выполняете ip route
Когда вы видите конкретную таблицу на да маршрутизации main
,Кроме main Есть другие таблицы маршрутизациижитьсуществовать。таблица Маршрутизации обычно идентифицируются целым числом или могут быть названы текстом. Эти имена сохраняются в существующих файлах. /etc/iproute2/rt_tables
середина. Содержимое по умолчанию следующее:
$ cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
Linux В системе вы можете настроить 1-252
индивидуальныйтаблица маршрутизации。Linux Система поддерживается по умолчанию 4 индивидуальныйтаблица маршрутизации:
этот Есть один виндивидуальныйочень странные слова:inr.ruhep
,это возможнода Alexey Kuznetsov Добавлено, что он отвечает за реализацию качества обслуживания (QoS) в ядре Linux, iproute2. Он же и главный. Это слово означает «Ядерные исследования/Российский институт физики высоких энергий». Alexey Место работы в это время может относиться к их внутренней сети. Конечно, есть и другая возможность: есть старая русская компьютерная сеть/провайдер. называется RUHEP/Radio-MSU[1]。
Есть два способа просмотра таблицы маршрутизации:
$ ip route show table table_number
$ ip route show table table_name
❝Не ставьте таблицу маршрутизациии iptables Запутать,таблица маршрутизации РешатьКак передавать пакеты данных,и iptables Решатьда Нет передачи пакетов данных,Их обязанности разные.
Как ядро узнает, какой пакет какую таблицу должен использовать? А как насчет маршрутизации? Ответ был дан ранее. В системе существует набор правил, которые сообщают ядру, как выбрать правильную таблицу для каждого пакета данных. маршрутизации,Этот свод правилдастратегия маршрутизациибаза данных。этотиндивидуальныйбаза данных Зависит от ip rule
Команда управления, если параметры не добавлены, будут напечатаны все правила маршрутизации:
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
Число слева (0, 32764, ......)Указывает приоритет правила:Чем меньше значение, тем выше приоритет правила.。То естьдаобъяснять,Правила с меньшими значениями будут обработаны в первую очередь.
❝Диапазон значений правил маршрутизации: 1 ~
Помимо приоритета,Каждыйиндивидуальныйправило Есть еще одининдивидуальныйселектор(selector)и соответствующиестратегия исполнения(action)。селекторбудет судить по правилуда Применимо ли к текущему пакету,если применимо,Просто реализуйте соответствующую стратегию. Самая распространенная стратегия исполнение Искать конкретную таблицу на да маршрутизации (см. предыдущий раздел). Если таблица Если маршрутизация содержит маршрут текущего пакета, то маршрут будет выполнен, в противном случае текущая таблица будет пропущена; маршрутизации, продолжайте соответствовать следующему правилу маршрутизации.
существовать Linux Когда система запустится, ядро будет в режиме стратегии. База данных маршрутизации настроена с тремя правилами по умолчанию:
существуют По умолчанию при маршрутизации сначала следуют правилам 0 существоватьместныйтаблица Найдите маршрут в маршрутизации. Если адрес назначения указан в этой сети или широковещательный адрес, существование может найти соответствующий маршрут здесь. Если маршрут не пройден, будет сопоставлено следующее непустое правило, только существующее; 32766 правило,существоватьздесь будетсуществоватьхозяинтаблица Найти маршрут в маршрутизации, если не получится, то он совпадет; 32767 правила, т.е. искать таблицу по умолчанию маршрутизации。если не удалось,Маршрутизация не удастся. Вы можете увидеть это здесь,Стратегическая маршрутизация совместима с предыдущими версиями。
сейчассуществоватьвернуться в WireGuard, многие WireGuard Пользователь решит передать весь трафик локального компьютера через WireGuard Пир-маршрутизация, причина всем известна😁.
Конфигурация также очень проста, просто добавьте 0.0.0.0/0
добавить в AllowedIPs
Прямо внутри:
# /etc/wireguard/wg0.conf
[Interface]
PrivateKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Address = 10.0.0.2/32
# PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
# ListenPort = 51820
[Peer]
PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Endpoint = 192.168.100.251:51820
AllowedIPs = 0.0.0.0/0
Теоретически это позволяет всему трафику проходить через одноранговый маршрут, но если вы используете wg-quick Версия более старая,Одна операция жестока, как тигр(wg-quick up wg0
)после,Вы обнаружите, что все не так, как вы себе представляли,Может быть, даже WireGuard Другой конец не может быть подключен. Главным образом потому, что WireGuard Его собственный трафик также маршрутизируется через интерфейс виртуальной сети, что заведомо невозможно.
новая версия wg-quick
проходитьстратегия Маршрутизации ловко решили эту проблему, давайте взглянем на ее замечательные возможности!
Во-первых, используйте wg-quick запускать wg0
Сетевая карта:
$ wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.2/32 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] wg set wg0 fwmark 51820
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] iptables-restore -n
Хе-хе, я увидел знакомую стратегию маршрутизации, распечатайте все правила маршрутизации, чтобы увидеть:
$ ip rule
0: from all lookup local
32764: from all lookup main suppress_prefixlength 0
32765: not from all fwmark 0xca6c lookup 51820
32766: from all lookup main
32767: from all lookup default
Привет ребята, еще два правила:
32764: from all lookup main suppress_prefixlength 0
32765: not from all fwmark 0xca6c lookup 51820
Давай снимем с них трусики,Раскройте тайну。Сначала три вопроса о душе:suppress_prefixlength
да Что?0xca6c
Что это еще раз? Как это возможно, что пакет данных not from all
?
первое правило 32764
Начните анализировать, поскольку его значение относительно невелико, оно будет сопоставлено в первую очередь:
32764: from all lookup main suppress_prefixlength 0
Это правило не использует селектор, то есть ядро будет запрашивать каждый пакет. main
таблица маршрутизации. давайте посмотрим main таблица маршрутизациисодержаниеда Что:
$ ip route
default via 192.168.100.254 dev eth0 proto dhcp src 192.168.100.63 metric 100
192.168.100.0/24 dev eth0 proto kernel scope link src 192.168.100.63
192.168.100.254 dev eth0 proto dhcp scope link src 192.168.100.63 metric 100
Если бы это было так, все пакеты прошли бы main таблица маршрутизации маршрута, никогда не приходит wg0. Не забывай,этотполоскаправило末尾Есть еще одининдивидуальныйпараметр:suppress_prefixlength 0
,этотда Что Что это значит??ссылка ip-rule(8)
man page:
suppress_prefixlength NUMBER
reject routing decisions that have a prefix length of NUMBER or less.
Вот prefix
То естьдапрефикс,выражатьтаблица маршрутизациисовпадающих диапазонов адресовмаска。поэтому,Еслитаблица маршрутизации Содержит 10.2.3.4
Для маршрутов длина префикса равна 32, если да; 10.0.0.0/8
,Длина префикса — да 8.
suppress
значит подавлять, поэтому suppress_prefixlength 0
значениеда:Отклонить стратегию маршрутизации, длина которой меньше или равна 0。
Итак, какая длина префикса диапазона адресов будет меньше или равна 0?Есть только одна возможность:0.0.0.0/0
,Это маршрут по умолчанию. Возьмите мою машину в качестве примера,Маршрут по умолчанию:
default via 192.168.100.254 dev eth0 proto dhcp src 192.168.100.63 metric 100
Если пакет данных соответствует маршруту по умолчанию, ему будет отказано в пересылке; если он соответствует другим маршрутам, он будет перенаправлен обычным образом;
Цель этого правила проста,Маршруты, добавленные администратором в основную таблицу маршрутизации вручную, будут перенаправлены в обычном режиме.,Маршрут по умолчанию будет игнорироваться,Продолжить соответствие следующему правилу。
Следующее правило 32765
:
32765: not from all fwmark 0xca6c lookup 51820
Вот not from all
да ip rule Проблема с форматированием,Немного античеловеческий,Последовательность, которую легче понять людям, должна быть такой:
32765: from all not fwmark 0xca6c lookup 51820
спереди wg-quick up wg0
Судя по выводу, правило селектора не добавлено from Префикс (адрес или диапазон адресов):
ip -4 rule add not fwmark 51820 table 51820
Если в селекторе правил нет from префикс,ip rule
распечатаю from all
,Так это правило делает это таким.
51820 даодининдивидуальныйтаблица маршрутизации,Также wg-quick Создан, содержит только один маршрут:
$ ip route show table 51820
default dev wg0 scope link
такэтотполоскаправило Эффектда:Все пакеты, соответствующие этому правилу, маршрутизируются через узел WireGuard.,Кроме not fwmark 0xca6c
。
0xca6c Только один тег брандмауэра, wg-quick позволит wg Отметьте все пакеты, которые он отправляет(wg set wg0 fwmark 51820),Эти пакеты инкапсулировали другие пакеты,еслиэтотнекоторые пакеты данныхтакжепроходить WireGuard Маршрутизация образует бесконечный цикл маршрутизации.
так not from all fwmark 0xca6c lookup 51820
Значение да сказал, выполнить условия from all fwmark 0xca6c
(WireGuard Принесите все, что вы отправляете fwmark 0xca6c) Пожалуйста,проигнорируйте это правило и продолжайте спускаться. В противном случае используйте 51820 таблица маршрутизации,проходить wg0 Туннель наружу.
для wg0 В пакет интерфейса входит 0xca6c, переходим к следующему правилу, то есть да соответствует значению по умолчанию main таблица маршрутизации:
32766: from all lookup main
На данный момент подавителей нет, и все пакеты можно использовать бесплатно. main таблица маршрутизации,поэтому WireGuard противоположный конец Endpoint Адрес пройдет eth0 Интерфейс отправлен.
Идеальный!
❝wg-quick Созданотаблицей маршрутизациии fwmark Используется тот же номер: 51820.0xca6c. да 51820 шестнадцатеричное представление.
wg-quick Самое умное в этом подходе то, что он не будет отвлекать ваше основное внимание. маршрутизации,идапроходитьправилосоответствовать новому Созданотаблицей маршрутизации。При отключении простоудалитьэтот两полоска路Зависит отправило,Путь по умолчанию Зависит отбудет повторно активирован。Вы потерпели неудачу в учебе?
[1]
RUHEP/Radio-MSU: http://www.radio-msu.net/about.htm