Рейтинг:1

Маршрутизация только частной сети в wireguard VPN

флаг in

У меня есть несколько хостов за NAT-маршрутизатором, к которым я хочу получить доступ через wireguard VPN. Я мог бы успешно настроить частную сеть, но кое-что меня все еще сбивает с толку.

Я хочу, чтобы каждый пир:

  • доступ друг к другу (172.9.9.*) через VPN (через WG0)
  • получить доступ ко всем остальным хостам за пределами VPN (через eth0).

Вот схема сети и текущая конфигурация:

- ...
â S âââââ⤠Интернет âââââ⤠A â
âââ â â â â ¬ â â ...
               ✓
               ✓
          -
          â NAT DHCP â
       ✓ Маршрутизатор
       -
       â
    -
    âX â âB â
    ✓ ✓
  • С является VPN-сервером и доступен в Интернете через статический IP-адрес;
  • Икс является «вычислительным сервером», он может выходить в Интернет, но находится за NAT, а его IP-адрес динамический и заранее неизвестен;
  • А это "удаленный клиент", который хочет подключиться к Икс;
  • Б является «локальным клиентом», который хочет подключиться к Икс и это в той же локальной сети.

Я хочу чтобы А и Б может подключиться к Икс через С, но все эти хосты должны использовать VPN только при контакте друг с другом, а не при доступе в Интернет.

Так, например, А может пинговать google.com напрямую, но будет пинговать Икс с помощью С.

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

Текущая конфигурация следующая:

## S WG0.conf

[Интерфейс]
PrivateKey = S-закрытый ключ
Адрес = 172.9.9.1/24
PostUp = iptables -A FORWARD -i wg0 -j ПРИНЯТЬ; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ПРИНЯТЬ; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
Порт прослушивания = 51820

[Вглядеться]
# А
PublicKey = A-открытый ключ
Разрешенные IP-адреса = 172.9.9.100/32

[Вглядеться]
# Б
PublicKey = B-открытый ключ
Разрешенные IP-адреса = 172.9.9.101/32

[Вглядеться]
# ИКС
PublicKey = X-открытый ключ
Разрешенные IP-адреса = 172.9.9.10/32
# WG0.conf

[Интерфейс]
Адрес = 172.9.9.100/24
PrivateKey = A-закрытый ключ
DNS = 1.1.1.1

[Вглядеться]
PublicKey = S-открытый ключ
Конечная точка = S-ip-адрес: 51820
Разрешенные IP-адреса = 0.0.0.0/0, ::/0

Бконфигурация аналогична А, но с ИП 172.9.9.101 и другой закрытый ключ.

# Xwg0.conf

[Интерфейс]
Адрес = 172.9.9.10/24
PrivateKey = X-закрытый ключ
DNS = 1.1.1.1

[Вглядеться]
PublicKey = S-открытый ключ
Конечная точка = S-ip-адрес: 51820
Разрешенные IP-адреса = 0.0.0.0/0, ::/0
PersistentKeepalive = 25 # Чтобы сервер оставался доступным

Эта конфигурация работает, и все хосты могут получить доступ друг к другу через VPN, но я хочу, чтобы ТОЛЬКО трафик направлялся на хосты. 172.9.9.* проходит через этот VPN. Остальной трафик должен направляться шлюзом по умолчанию.

Что меня озадачивает, так это то, что если я изменю конфигурацию А так что

Разрешенные IP-адреса = 172.9.9.0/24

затем, для А, пакеты маршрутизируются, как предполагалось (например, я могу скручивание ifconfig.me и получить Апубличный IP), но если я сделаю то же самое на Икс, это не будет работать и пакеты не будут 172.9.9.0/24 доставить не получится.

РЕДАКТИРОВАТЬ №1

Забыл упомянуть, что мне бы также хотелось, чтобы при подключении к Икс, местные клиенты, такие как Б не будет отправлять пакеты за пределы локальной сети, поэтому Б -> Маршрутизатор -> Х и нет B -> Маршрутизатор -> S -> Маршрутизатор -> X.

флаг mx
«AllowedIPs» — это то, что нужно, как ясно объяснил Джастин в своем ответе. Возможно, вы не можете `curl ifconfig.me` при использовании `AllowedIPs = 172.9.9.0/24` из-за проблем с DNS. Проверьте, можете ли вы «пинговать 8.8.8.8»: если можете, исправьте разрешение DNS.
Рейтинг:2
флаг cn

Установлен Разрешенные IP-адреса на IP-адреса, которые вы хотите маршрут к/через пир.

В обычной звездообразной конфигурации на вашем концентраторе (S) вы должны настроить Разрешенные IP-адреса для каждого узла, как у вас, маршрутизация пакетов каждому узлу, только если они используют IP-адрес узла WireGuard в качестве адреса назначения; и на ваших лучах (A, B и X) вы должны настроить Разрешенные IP-адреса в CIDR вашей сети WireGuard (172.9.9.0/24), маршрутизирующие пакеты к концентратору только в том случае, если они используют IP-адреса WireGuard другого узла в качестве адреса назначения.

Таким образом, в обычной конфигурации вы бы получили доступ к A из B или X с IP-адресом WireGuard A 172.9.9.100, B из A или X с 172.9.9.101, и X из A или B с 172.9.9.10.

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

Например, если А eth0 адрес 198.51.100.65, B - это 192.168.0.66, а X - это 192.168.0.88, вы должны настроить одноранговые узлы в конфигурации WireGuard концентратора следующим образом:

## S WG0.conf
...

[Вглядеться]
# А
PublicKey = A-открытый ключ
Разрешенные IP-адреса = 172.9.9.100/32
Разрешенные IP-адреса = 198.51.100.65/32

[Вглядеться]
# Б
PublicKey = B-открытый ключ
Разрешенные IP-адреса = 172.9.9.101/32
Разрешенные IP-адреса = 192.168.0.66/32

[Вглядеться]
# ИКС
PublicKey = X-открытый ключ
Разрешенные IP-адреса = 172.9.9.10/32
Разрешенные IP-адреса = 192.168.0.88/32

И установить Разрешенные IP-адреса в конфигурации каждой спицы к этому:

Разрешенные IP-адреса = 172.9.9.0/24
Разрешенные IP-адреса = 198.51.100.65/32
Разрешенные IP-адреса = 192.168.0.66/32
Разрешенные IP-адреса = 192.168.0.88/32

(Обратите внимание, что вы также можете указать все блоки в одной строке, например Разрешенные IP-адреса = 172.9.9.0/24, 198.51.100.65/32, 192.168.0.66/32, 192.168.0.88/32 Если вы предпочитаете.)


С вашей текущей конфигурацией, где у вас есть Разрешенные IP-адреса = 0.0.0.0/0 на X, когда вы запускаете завиток 198.51.100.65 из X происходит то, что X направляет пакеты, предназначенные для A (и все остальное), через свой туннель WireGuard на S, а затем S направляет эти пакеты в незашифрованном виде через Интернет на A (замаскированный собственным общедоступным IP-адресом S); в ответ A отправляет незашифрованные пакеты через Интернет к S, которые S направляет через свой туннель WireGuard к X.

Если вы хотите убедиться, что S никогда не направлять пакеты, туннелированные через вашу сеть WireGuard, в Интернет, вы можете изменить правила iptables, чтобы предотвратить это; что-то вроде следующего, вероятно, поможет:

PostUp = iptables -A FORWARD -i wg0 -o wg0 -j ПРИНЯТЬ; iptables -A FORWARD -i wg0 -o eth0 -j DROP; iptables -A ВПЕРЕД -i eth0 -o wg0 -j УДАЛИТЬ
ARDVL avatar
флаг in
Спасибо за это подробное объяснение! Это очень ясно, хотя что касается доступа с использованием IP-адреса `NIC`, мне все еще неясно: поскольку `X` и `B` находятся за DHCP и их IP-адрес может измениться (особенно для `B`), я не могу знать это заранее и установить соответствующий разрешенный IP.
ARDVL avatar
флаг in
Кроме того, я уже пытался установить «AllowedIPs» на «172.9.9.0/24», но это не сработало. Как было упомянуто в комментарии, это была проблема с DNS.
флаг cn
Чтобы использовать назначенные DHCP адреса NIC, вам нужно либо настроить DHCP-сервер для назначения фиксированных IP-адресов X и B, либо обновлять настройки AllowedIPs других узлов каждый раз, когда X или B назначается другой адрес. ( Но также обратите внимание, что вы можете сделать гибрид этого, когда вы получаете доступ к A через его адрес NIC, а к X и B через их адреса WireGuard - в этом случае вы можете просто опустить адреса NIC X и B в настройках «AllowedIPs». .)
Рейтинг:0
флаг in

У меня возникла проблема с DNS: использование Разрешенные IP-адреса = 172.9.9.0/24 разрешил мне пинговать 8.8.8.8, но нет google.com.

Я решил включить интерфейс DNS в разрешенные IP-адреса, поэтому я получаю разрешение DNS через VPN, но трафик не в VPN:

[Интерфейс]
...
DNS = 1.1.1.1

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

Это не отвечает на второй вопрос, который у меня был: возможно ли сделать Икс и Б общаться напрямую, не проходя через С. Другой ответ помогает понять это.

РЕДАКТИРОВАТЬ

Кажется, что это работает и при сбросе DNS поле, поэтому он должен использовать один и тот же DNS-сервер для обоих интерфейсов.

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

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