Соединение Wireguard между двумя локальными сетями с блоками wireguard за маршрутизаторами

Текущая настройка заставляет весь трафик с 192.168.1.100 использовать вторую таблицуisp2

для этой таблицы настроен только шлюз по умолчанию.

нужно добавить еще один маршрут

ip route add 192.168.1.0/24 dev enp0s25 src 192.168.1.100 table isp2
0
17.03.2021, 16:04
1 ответ

Решение этой проблемы довольно простое, однако я не нашел в Интернете описания того, как сделать такой сайт -на -сайт VPN. Поэтому я решил опубликовать решение, которое работает для меня, здесь.

Отказ от ответственности:Это решение работает только для IPv4. Поскольку один из моих интернет-провайдеров не предоставляет IPv6, я не настраивал IPv6. Это остается для будущих улучшений.

IP-переадресация

Сначала необходимо включить переадресацию IP-адресов, чтобы nanopi перенаправлял трафик с одного интерфейса на другой. Линия

net.ipv4.ip_forward=1

должен присутствовать в /etc/sysctl.confили в каком-то .confфайле в /etc/sysctl.d/. Запустите sysctl -pилиservice procps reload(в зависимости от дистрибутива Linux )или просто перезагрузитесь, чтобы изменения вступили в силу.

Проволока

Не буду вдаваться в подробности настройки wireguard. В интернете их много. Я просто напишу некоторые детали сети, используемые в моем случае, и укажу на два нетипичных изменения конфигурации, которые я сделал в /etc/wireguard/wg0.conf. Как упоминалось в вопросе, есть два сайта:

  1. 192.168.0.0/24с nanopi, выступающим в роли сервера wireguard с адресом wireguard 10.0.0.1на интерфейсе wg0.
  2. 192.168.1.0/24с nanopi, выступающим в качестве клиента wireguard с адресом wireguard 10.0.0.2на интерфейсе wg0.

Изменения в /etc/wireguard/wg0.conf::

Во-первых, добавлена ​​инструкция, предотвращающая быструю настройку wg -правил IP и маршрутов. В секцию [Interface]:

добавлена ​​строка Table = off.
Table = off

Во-вторых , добавьте маршрут для прямого трафика через VPN-подключение. Снова в [Interface]секции:

PostUp = ip route add 192.168.1.0/24 via 10.0.0.2 dev wg0
PreDown = ip route del 192.168.1.0/24 via 10.0.0.2 dev wg0

Приведенные выше строки относятся к первому сайту и указывают ядру направлять весь трафик для другой сети(192.168.1.0/24)на IP-адрес, подключенный на другой стороне VPN(10.0.0.2)через устройство wg0. На другом сайте IP-адреса в конфигурации разные(192.168.0.0/24и10.0.0.1).

Третий ,второй компьютер wireguard, действующий как клиент wireguard, имеет Endpoint, определенный в разделе [Peer], а первый, действующий как сервер, не имеет. Эта конечная точка является общедоступным IP-адресом и портом, где доступен сервер nanopi. На маршрутизаторе сервер nanopi должен быть подключен к Интернету, чтобы разрешить входящие соединения. На месте, где находится сервер wireguard, интернет-маршрутизатор должен иметь NATили Port forwardingили что-то в этом роде. На порту, к которому подключается wireguard, должен быть UDP, перенаправленный на IP и порт IP и порт сервера wireguard. Я не буду показывать это здесь, потому что каждый маршрутизатор имеет свой графический интерфейс для настройки.

Маршрутизация и DHCP

Теперь, когда соединение wireguard работает, вы сможете получить доступ к nano pi на другом сайте через VPN. При входе в192.168.0.250(10.0.0.1наwg0)можно выполнить ping (или войти в)10.0.0.2и наоборот. Однако другие клиенты в обеих сетях не имеют информации о том, как туда добраться через VPN. У них есть шлюз по умолчанию, куда они перенаправляют весь трафик, не предназначенный для локальной сети. Поскольку адреса с другого сайта не являются локальными, весь трафик, который должен проходить через VPN, уходит в Интернет через маршрутизаторы интернет-провайдеров.

Один из способов — добавить настраиваемый статический маршрут на каждое устройство в сети. Некоторые это позволяют, но многие нет. На компьютерах с Windows или Linux есть возможность добавить маршрут. На устройствах Android это уже проблема. Значит, надо искать другие решения, где не нужно прописывать статический маршрут на каждом устройстве.

Если маршрутизатор ISP имеет возможность добавлять пользовательские маршруты, такой маршрут можно добавить. Я не могу показать здесь, как именно это может быть достигнуто. В общем, все адреса с другого сайта (например. 192.168.0.0с сетевой маской 24или 255.255.255.0должны быть перенаправлены на192.168.1.250).

Если это невозможно, я бы рекомендовал настроить DHCP-сервер на nanopi и отключить функцию DHCP на маршрутизаторе ISP.isc-dhcp-serverможет быть установлен практически во всех дистрибутивах Linux, и этот сервер может отправлять правильную информацию о маршрутизации всем клиентам в сети, если они используют DHCP. Я не буду вдаваться в подробности настройки DHCP-сервера. Вот пример/etc/dhcp/dhcpd.conf:

default-lease-time 600;
max-lease-time 7200;

option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
option routers 192.168.0.1;
option domain-name "localdomain";
option domain-name-servers 192.168.0.3;

option rfc3442-classless-static-routes code 121 = array of integer 8;
option ms-classless-static-routes code 249 = array of integer 8;

option rfc3442-classless-static-routes 24, 192, 168, 1, 192, 168, 0, 250, 0, 192, 168, 0, 1;
option ms-classless-static-routes 24, 192, 168, 1, 192, 168, 0, 250, 0, 192, 168, 0, 1;

subnet 192.168.0.0 netmask 255.255.255.0 {
    range 192.168.0.150 192.168.0.229;

    default-lease-time 86400;
    max-lease-time 172800;
}

host staticip {
    default-lease-time 86400;
    max-lease-time 172800;

    hardware ethernet aa:bb:cc:dd:ee:ff;
    fixed-address 192.168.0.4;
}

В конфигурации dhcp все довольно стандартно. DHCP назначает адреса от 192.168.0.150до 192.168.0.229. Измените это на свои предпочтения.

Я должен указать строки option rfc3442...и option ms-classless.... Они определяют параметры DHCP для отправки информации о маршруте. Один предназначен для клиентов, следующих RFC 3442, а другой — для клиентов Microsoft, которые используют другой вариант. Цифры 24, 192, 168, 1, 192, 168, 0, 250, 0, 192, 168, 0, 1имеют следующее значение:

  1. Первый статический маршрут :
    • 24-размер сетевой маски
    • 192, 168, 1-префикс для маски сети, определенной выше
    • 192, 168, 0, 250-шлюз для указанной выше сети
  2. Второй статический маршрут :
    • 0-размер сетевой маски (шлюз по умолчанию)
    • нет сети, так как маска выше0
    • 192, 168, 0, 1-шлюз для указанной выше сети

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

В конце конфигурационного файла dchp есть пример резервирования DHCP для клиентов со статическими IP-адресами. Введите ваш аппаратный Ethernet (MAC-адрес )и желаемый IP-адрес.

Брандмауэры

Теперь клиенты из одной сети должны иметь доступ к клиентам из другой сети через Wireguard VPN, при условии, что брандмауэры будут пропускать трафик.

Если на вашем VPN-компьютере есть брандмауэр (, например. nanopi )может не пропускать трафик. Создайте правила брандмауэра в соответствии с вашими предпочтениями и требованиями безопасности вашей среды. Вы можете открыть каждый отдельный порт, через который вам нужно пройти на VPN-компьютере,или можно открыть все, если оно находится в доверенной среде. Один из способов сделать это — использовать команды firewall-cmd. Вот пример:

# set "trusted" as a default zone
firewall-cmd --set-default-zone=trusted

# see in which zones the interfaces are
firewall-cmd --get-active-zones

# you may have to remove eth0 from the zone where it belongs to (public in this case)
firewall-cmd --permanent --zone=public --remove-interface=eth0
# add eth0 to trusted zone
firewall-cmd --permanent --zone=trusted --add-interface=eth0

# you may have to remove wg0 from the zone where it belongs to (public in this case)
firewall-cmd --permanent --zone=public --remove-interface=wg0
# add wg0 to trusted zone
firewall-cmd --permanent --zone=trusted --add-interface=wg0

# reload the new config
firewall-cmd --reload

Кроме того, на каждом устройстве есть брандмауэры, которые могут блокировать входящий трафик. Как правило, брандмауэр Windows разрешает некоторые подключения только из «локальной сети». Другой сайт не находится в локальной сети, поэтому сервер будет блокировать соединения, идущие через VPN. Вы должны добавить другую сеть (, например.192.168.1.0/24)для каждого правила, блокирующего определенное соединение. Например, для общего доступа Windows необходимо изменить все входящие правила для портов 135 -, 139 и 445 для общего доступа к компьютеру. Точно так же вы должны изменить исходящие правила на компьютере, обращающемся к общему ресурсу.

Я определенно рекомендую потратить некоторое время на точную настройку брандмауэров, а не просто отключать их.

Я надеюсь, что инструкции достаточно ясны и помогут настроить сайт -на сайт -VPN или, по крайней мере, дадут представление о том, как это сделать. Требуются некоторые знания в области сетей и администрирования.

4
18.03.2021, 23:15

Теги

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