Рейтинг:0

Wireguard не работает с enpoint, включенным в AllowedIps

флаг cn

Я запускаю wireguard enpoint в качестве док-контейнера на своем сервере, а клиенты roadwarrior подключаются к нему через LTE:

схема сети wireguard

Настоящий адрес сервера — это статический общедоступный IP-адрес. Конфигурация клиента выглядит следующим образом (исключены нерелевантные части):

[Интерфейс]
Адрес = 10.254.99.2

[Вглядеться]
Разрешенные IP-адреса = 10.254.99.1/32
Конечная точка = 192.168.5.55

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

IP-маршрут добавить 10.254.99.0/24 через 172.17.0.2 dev docker0 src 192.168.5.55

Соответственно добавляю источник адрес в список AllowedIps на сервере:

[Вглядеться]
Разрешенные IP-адреса = 10.254.99.1/32, 192.168.5.55/32

И с этим вещи перестают работать. Я больше не могу пинговать клиента ни с сервера, ни из контейнера. Если вместо этого я разрешаю все IP-адреса на клиенте, все работает так, как ожидалось:

[Вглядеться]
Разрешенные IP-адреса = 0.0.0.0/0

Но я не хочу направлять весь трафик через туннель. Как правильно это сделать?

A.B avatar
флаг cl
A.B
несколько вопросов сразу. `Конечная точка = 192.168.5.55`.Означает ли это, что вы пытаетесь туннелировать 192.168.5.55 внутри туннеля, заключенного в 192.168.5.55?
флаг cn
Я не собираюсь, но я думаю, что это то, что я делаю. Я хочу разрешить трафик только с 192.168.5.55 через wg. Не уверен, почему это работает с 0.0.0.0/0 в разрешенных IP-адресах.
Рейтинг:2
флаг cn

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

Чтобы это исправить, избавьтесь от источник настройка маршрута, который вы добавили на сервер, так что маршрут будет использовать только адрес сервера докер0 интерфейс:

IP-маршрут добавить 10.254.99.0/24 через 172.17.0.2 dev docker0

Затем измените клиент WireGuard Разрешенные IP-адреса настройка для включения адреса сервера докер0 интерфейс (172.17.0.1):

Разрешенные IP-адреса = 10.254.99.1/32, 172.17.0.1/32

Теперь ваш сервер будет использовать свой докер0 адрес интерфейса (172.17.0.1) в качестве источника пакетов, которые он отправляет через вашу сеть WireGuard.


Однако вместо того, чтобы добавлять этот дополнительный уровень маршрутизации на ваш сервер, проще всего будет запустить контейнер WireGuard в сетевом режиме «хост» (используя --сеть=хост флаг с докер запустить, или network_mode: хост установка с docker-compose).Это выставит контейнер WireGuard WG0 интерфейс напрямую к хосту, поэтому вам не потребуются дополнительные правила маршрутизации на сервере, и вам не нужно будет добавлять дополнительные Разрешенные IP-адреса клиенту.

В этом случае сервер просто будет использовать собственный интерфейс WireGuard. 10.254.99.1 адрес в качестве источника пакетов, которые он отправляет через вашу сеть WireGuard.


* если вы не настроили какие-то причудливые правила маршрутизации/фильтрации пакетов на своем клиенте вместо использования значений по умолчанию, которые устанавливает для вас клиент WireGuard

флаг us
«Вы не можете использовать один и тот же адрес в настройках Endpoint и AllowedIPs клиента». Почему это работает, когда AllowedIPs=0.0.0.0/0? Этот CIDR охватывает конечную точку.
флаг cn
`AllowedIPs = 0.0.0.0/0` работает, потому что особые случаи клиента WireGuard `/0` устанавливают для вас некоторые причудливые правила маршрутизации/фильтрации пакетов. Начните здесь для объяснения того, как wg-quick справляется с этим в Linux: https://stackoverflow.com/a/70827884/149050

Ответить или комментировать

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