Установка WireGuard на Ubuntu 20.04 LTS. Часть вторая из двух
05.09.2020
Теги: Linux • Ubuntu • VPN • Клиент • Ключ • Конфигурация • ЛокальнаяСеть • Маршрутизация • Настройка • Сервер • Установка
Допустим, у нас есть локальная сеть компании и локальная сеть филиала, расположенные далеко друг от друга. И нам надо обеспечить связь между этими сетями по защищенному каналу. Интернет-провайдеры не предоставляют белых ip-адресов, поэтому нам потребуется промежуточный сервер, у которого такой ip-адрес есть.
Настройка шлюза gateway1
Шлюз должен обеспечивать выход в интернет для всех компьютеров сети 192.168.150.0/24
, поэтому разрешаем форвардинг пакетов между интерфейсами и добавляем несколько правил для netfilter
с помощью утилиты iptables
.
$ sudo nano /etc/sysctl.conf # форвардинг пакетов
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
Чтобы изменения вступили в силу
$ sudo sysctl -p /etc/sysctl.conf net.ipv4.ip_forward = 1
Добавляем несколько правил
$ sudo iptables -P FORWARD DROP $ sudo iptables -A FORWARD -i enp0s8 -o enp0s3 -s 192.168.150.0/24 -j ACCEPT $ sudo iptables -A FORWARD -i enp0s3 -o enp0s8 -d 192.168.150.0/24 -j ACCEPT $ sudo iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
Для восстановления правил после перезагрузки
$ sudo apt install iptables-persistent
Сетевые настройки шлюза
$ sudo nano /etc/netplan/01-netcfg.yaml
network: version: 2 renderer: networkd ethernets: enp0s3: dhcp4: no addresses: [192.168.100.2/24] gateway4: 192.168.100.1 nameservers: addresses: [8.8.8.8, 8.8.4.4] enp0s8: dhcp4: no addresses: [192.168.150.1/24] nameservers: addresses: [8.8.8.8, 8.8.4.4]
Настройка шлюза gateway2
Шлюз должен обеспечивать выход в интернет для всех компьютеров сети 192.168.250.0/24
, поэтому разрешаем форвардинг пакетов между интерфейсами и добавляем несколько правил для netfilter
с помощью утилиты iptables
.
$ sudo nano /etc/sysctl.conf # форвардинг пакетов
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
Чтобы изменения вступили в силу
$ sudo sysctl -p /etc/sysctl.conf net.ipv4.ip_forward = 1
Добавляем несколько правил
$ sudo iptables -P FORWARD DROP $ sudo iptables -A FORWARD -i enp0s8 -o enp0s3 -s 192.168.250.0/24 -j ACCEPT $ sudo iptables -A FORWARD -i enp0s3 -o enp0s8 -d 192.168.250.0/24 -j ACCEPT $ sudo iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
Для восстановления правил после перезагрузки
$ sudo apt install iptables-persistent
Сетевые настройки шлюза
$ sudo nano /etc/netplan/01-netcfg.yaml
network: version: 2 renderer: networkd ethernets: enp0s3: dhcp4: no addresses: [192.168.200.2/24] gateway4: 192.168.200.1 nameservers: addresses: [8.8.8.8, 8.8.4.4] enp0s8: dhcp4: no addresses: [192.168.250.1/24] nameservers: addresses: [8.8.8.8, 8.8.4.4]
Настройка VPN-сервера
Устанавливаем пакет wireguard
на vpn-server
, gateway1
и gateway2
:
$ sudo apt install wireguard
Создаем файл конфигурации сервера:
$ sudo nano /etc/wireguard/wg0.conf
[Interface] # ip-адрес сервера в виртуальной сети Address = 10.8.0.1/24 # порт, на котором ожидать подключения ListenPort = 54321 # приватный ключ сервера PrivateKey = KB7lZqhYeY5LlwdUt4RpmUMTXnv0nsIajSCTwO01qHM= # выполнить команды сразу после запуска сервера PostUp = sysctl -w -q net.ipv4.ip_forward=1 PostUp = iptables -P FORWARD DROP PostUp = iptables -A FORWARD -i %i -o %i -j ACCEPT # выполнить команды сразу после остановки сервера PostDown = sysctl -w -q net.ipv4.ip_forward=0 PostDown = iptables -P FORWARD ACCEPT PostDown = iptables -D FORWARD -i %i -o %i -j ACCEPT [Peer] # публичный ключ первого клиента PublicKey = ELCQ4Q+dbMZFSaLuK8UrJEpOXNEu6hzdCNWIqYqh7So= # принимать пакеты с такими ip-адресами источника от этого клиента, # отправлять пакеты с такими ip-адресами назначения этому клиенту AllowedIPs = 10.8.0.2/32, 192.168.150.0/24 [Peer] # публичный ключ второго клиента PublicKey = GZHjarCmFTqpnFkyPcts/iNPvUsYWk9ecXujh7eURGY= # принимать пакеты с такими ip-адресами источника от этого клиента, # отправлять пакеты с такими ip-адресами назначения этому клиенту AllowedIPs = 10.8.0.3/32, 192.168.250.0/24
Сразу после запуска службы мы выполянем команды: разрешаем форвардинг пакетов между интерфейсами, разрешаем VPN-клиентам общаться между собой и разрешаем обмен пакетами между компьютерами двух сетей 192.168.150.0/24
и 192.168.250.0/24
. При остановке службы — действие всех этих команд отменяется.
Все готово, запускаем службу:
$ sudo systemctl start wg-quick@wg0.service
Добавим службу в автозагрузку:
$ sudo systemctl enable wg-quick@wg0.service
Настройка первого клиента (gateway1)
Создаем файл конфигурации первого клиента:
$ sudo nano /etc/wireguard/wg0.conf
[Interface] # ip-адрес первого клиента в виртуальной сети Address = 10.8.0.2/24 # приватный ключ первого клиента PrivateKey = ePEDoCDFjP7F9tY3cloqC9QGjf5T0cgi/YAhTB36wUo= # выполнить команды сразу после запуска сервера PostUp = iptables -I FORWARD -i enp0s8 -o %i -s 192.168.150.0/24 -d 192.168.250.0/24 -j ACCEPT PostUp = iptables -I FORWARD -i %i -o enp0s8 -s 192.168.250.0/24 -d 192.168.150.0/24 -j ACCEPT # выполнить команды сразу после остановки сервера PostDown = iptables -D FORWARD -i enp0s8 -o %i -s 192.168.150.0/24 -d 192.168.250.0/24 -j ACCEPT PostDown = iptables -D FORWARD -i %i -o enp0s8 -s 192.168.250.0/24 -d 192.168.150.0/24 -j ACCEPT [Peer] # публичный ключ сервера PublicKey = dp9cddCMlwoF4oOBO+6aoXZfwQhqJr6W5vv6LYu5GHk= # ip-адрес и порт сервера Endpoint = 123.123.123.123:54321 # принимать пакеты с такими ip-адресами источника от сервера, # отправлять пакеты с такими ip-адресами назначения серверу AllowedIPs = 10.8.0.0/24, 192.168.250.0/24 # поддерживать соединение в активном состоянии, # каждые 25 секунд отправлять пакет на сервер PersistentKeepalive = 25
Если пакет из сети 192.168.150.0/24
предназначен для сети 192.168.250.0/24
— разрешаем его пересылку от интерфейса enp0s8
на интерфейс wg0
. Далее этот пакет попадет на сервер vpn-server
и будет отправлен клиенту gateway2
. А клиент gateway2
перебросит этот пакет с интерфейса wg0
на интерфейс enp0s8
и отправит дальше — в сеть 192.168.250.0/24
.
Все готово, запускаем службу:
$ sudo systemctl start wg-quick@wg0.service
Добавим службу в автозагрузку:
$ sudo systemctl enable wg-quick@wg0.service
Настройка второго клиента (gateway2)
Создаем файл конфигурации второго клиента:
$ sudo nano /etc/wireguard/wg0.conf
[Interface] # ip-адрес второго клиента в виртуальной сети Address = 10.8.0.3/24 # приватный ключ второго клиента PrivateKey = KHwPyph1rUBjThkmfbWuSNFp3lBWqp/NdkvImJ5Ncmw= # выполнить команды сразу после запуска сервера PostUp = iptables -I FORWARD -i enp0s8 -o %i -s 192.168.250.0/24 -d 192.168.150.0/24 -j ACCEPT PostUp = iptables -I FORWARD -i %i -o enp0s8 -s 192.168.150.0/24 -d 192.168.250.0/24 -j ACCEPT # выполнить команды сразу после остановки сервера PostDown = iptables -D FORWARD -i enp0s8 -o %i -s 192.168.250.0/24 -d 192.168.150.0/24 -j ACCEPT PostDown = iptables -D FORWARD -i %i -o enp0s8 -s 192.168.150.0/24 -d 192.168.250.0/24 -j ACCEPT [Peer] # публичный ключ сервера PublicKey = dp9cddCMlwoF4oOBO+6aoXZfwQhqJr6W5vv6LYu5GHk= # ip-адрес и порт сервера Endpoint = 123.123.123.123:54321 # принимать пакеты с такими ip-адресами источника от сервера, # отправлять пакеты с такими ip-адресами назначения серверу AllowedIPs = 10.8.0.0/24, 192.168.150.0/24 # поддерживать соединение в активном состоянии, # каждые 25 секунд отправлять пакет на сервер PersistentKeepalive = 25
Если пакет из сети 192.168.250.0/24
предназначен для сети 192.168.150.0/24
— разрешаем его пересылку от интерфейса enp0s8
на интерфейс wg0
. Далее этот пакет попадет на сервер vpn-server
и будет отправлен клиенту gateway1
. А клиент gateway1
перебросит этот пакет с интерфейса wg0
на интерфейс enp0s8
и отправит дальше — в сеть 192.168.150.0/24
.
Все готово, запускаем службу:
$ sudo systemctl start wg-quick@wg0.service
Добавим службу в автозагрузку:
$ sudo systemctl enable wg-quick@wg0.service
Проверяем, как все работает
Выполняем ping
компьютера pc3
с компьютера pc1
:
$ ping -c3 192.168.250.2 PING 192.168.250.2 (192.168.250.2) 56(84) bytes of data. 64 bytes from 192.168.250.2: icmp_seq=1 ttl=61 time=25.1 ms 64 bytes from 192.168.250.2: icmp_seq=2 ttl=61 time=23.9 ms 64 bytes from 192.168.250.2: icmp_seq=3 ttl=61 time=31.9 ms --- 192.168.250.2 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 23.934/26.966/31.884/3.508 ms
Еще один VPN-клиент
Допустим, что какой-то сотрудник работает удаленно и надо обеспечить ему доступ к ресурсам двух сетей.
1. Файл конфигурации нового клиента
Файл конфигурации третьего клиента:
[Interface] # ip-адрес третьего клиента в виртуальной сети Address = 10.8.0.4/24 # приватный ключ третьего клиента PrivateKey = IC0RaHbpd9S+TAz3NUd7zVNQPqYDoP87izEV2tsQ5Ww= [Peer] # публичный ключ сервера PublicKey = dp9cddCMlwoF4oOBO+6aoXZfwQhqJr6W5vv6LYu5GHk= # ip-адрес и порт сервера Endpoint = 123.123.123.123:54321 # принимать пакеты с такими ip-адресами источника от сервера, # отправлять пакеты с такими ip-адресами назначения серверу AllowedIPs = 10.8.0.0/24, 192.168.150.0/24, 192.168.250.0/24 # поддерживать соединение в активном состоянии, # каждые 25 секунд отправлять пакет на сервер PersistentKeepalive = 25
2. Файл конфигурации VPN-сервера
Изменяем файл конфигурации VPN-сервера:
[Interface] # ip-адрес сервера в виртуальной сети Address = 10.8.0.1/24 # порт, на котором ожидать подключения ListenPort = 54321 # приватный ключ сервера PrivateKey = KB7lZqhYeY5LlwdUt4RpmUMTXnv0nsIajSCTwO01qHM= # выполнить команды сразу после запуска сервера PostUp = sysctl -w -q net.ipv4.ip_forward=1 PostUp = iptables -P FORWARD DROP PostUp = iptables -A FORWARD -i %i -o %i -j ACCEPT # выполнить команды сразу после остановки сервера PostDown = sysctl -w -q net.ipv4.ip_forward=0 PostDown = iptables -P FORWARD ACCEPT PostDown = iptables -D FORWARD -i %i -o %i -j ACCEPT [Peer] # публичный ключ первого клиента PublicKey = ELCQ4Q+dbMZFSaLuK8UrJEpOXNEu6hzdCNWIqYqh7So= # принимать пакеты с такими ip-адресами источника от этого клиента, # отправлять пакеты с такими ip-адресами назначения этому клиенту AllowedIPs = 10.8.0.2/32, 192.168.150.0/24 [Peer] # публичный ключ второго клиента PublicKey = GZHjarCmFTqpnFkyPcts/iNPvUsYWk9ecXujh7eURGY= # принимать пакеты с такими ip-адресами источника от этого клиента, # отправлять пакеты с такими ip-адресами назначения этому клиенту AllowedIPs = 10.8.0.3/32, 192.168.250.0/24 [Peer] # публичный ключ третьего клиента PublicKey = EtxyuRYC/dmu8sTfMz2Gah+AnHskk3NGokcGPAgJRyw= # принимать пакеты с такими ip-адресами источника от этого клиента, # отправлять пакеты с такими ip-адресами назначения этому клиенту AllowedIPs = 10.8.0.4/32
3. Файл конфигурации первого клиента (gateway1)
Изменяем файл конфигурации первого клиента:
[Interface] # ip-адрес первого клиента в виртуальной сети Address = 10.8.0.2/24 # приватный ключ первого клиента PrivateKey = ePEDoCDFjP7F9tY3cloqC9QGjf5T0cgi/YAhTB36wUo= # выполнить команды сразу после запуска сервера PostUp = iptables -I FORWARD -i enp0s8 -o %i -s 192.168.150.0/24 -d 10.8.0.0/24 -j ACCEPT PostUp = iptables -I FORWARD -i %i -o enp0s8 -s 10.8.0.0/24 -d 192.168.150.0/24 -j ACCEPT PostUp = iptables -I FORWARD -i enp0s8 -o %i -s 192.168.150.0/24 -d 192.168.250.0/24 -j ACCEPT PostUp = iptables -I FORWARD -i %i -o enp0s8 -s 192.168.250.0/24 -d 192.168.150.0/24 -j ACCEPT # выполнить команды сразу после остановки сервера PostDown = iptables -D FORWARD -i enp0s8 -o %i -s 192.168.150.0/24 -d 10.8.0.0/24 -j ACCEPT PostDown = iptables -D FORWARD -i %i -o enp0s8 -s 10.8.0.0/24 -d 192.168.150.0/24 -j ACCEPT PostDown = iptables -D FORWARD -i enp0s8 -o %i -s 192.168.150.0/24 -d 192.168.250.0/24 -j ACCEPT PostDown = iptables -D FORWARD -i %i -o enp0s8 -s 192.168.250.0/24 -d 192.168.150.0/24 -j ACCEPT [Peer] # публичный ключ сервера PublicKey = dp9cddCMlwoF4oOBO+6aoXZfwQhqJr6W5vv6LYu5GHk= # ip-адрес и порт сервера Endpoint = 123.123.123.123:54321 # принимать пакеты с такими ip-адресами источника от сервера, # отправлять пакеты с такими ip-адресами назначения серверу AllowedIPs = 10.8.0.0/24, 192.168.250.0/24 # поддерживать соединение в активном состоянии, # каждые 25 секунд отправлять пакет на сервер PersistentKeepalive = 25
После запуска службы мы выполянем команды, которые
- разрешат компьютерам сети
192.168.150.0/24
отправлять пакеты VPN-клиентам - разрешат компьютерам сети
192.168.150.0/24
получать пакеты от VPN-клиентов - разрешат компьютерам сети
192.168.150.0/24
отправлять пакеты в сеть192.168.250.0/24
- разрешат компьютерам сети
192.168.150.0/24
получать пакеты из сети192.168.250.0/24
4. Файл конфигурации второго клиента (gateway2)
Изменяем файл конфигурации второго клиента:
[Interface] # ip-адрес второго клиента в виртуальной сети Address = 10.8.0.3/24 # приватный ключ второго клиента PrivateKey = KHwPyph1rUBjThkmfbWuSNFp3lBWqp/NdkvImJ5Ncmw= # выполнить команды сразу после запуска сервера PostUp = iptables -I FORWARD -i enp0s8 -o %i -s 192.168.250.0/24 -d 10.8.0.0/24 -j ACCEPT PostUp = iptables -I FORWARD -i %i -o enp0s8 -s 10.8.0.0/24 -d 192.168.250.0/24 -j ACCEPT PostUp = iptables -I FORWARD -i enp0s8 -o %i -s 192.168.250.0/24 -d 192.168.150.0/24 -j ACCEPT PostUp = iptables -I FORWARD -i %i -o enp0s8 -s 192.168.150.0/24 -d 192.168.250.0/24 -j ACCEPT # выполнить команды сразу после остановки сервера PostDown = iptables -D FORWARD -i enp0s8 -o %i -s 192.168.250.0/24 -d 10.8.0.0/24 -j ACCEPT PostDown = iptables -D FORWARD -i %i -o enp0s8 -s 10.8.0.0/24 -d 192.168.250.0/24 -j ACCEPT PostDown = iptables -D FORWARD -i enp0s8 -o %i -s 192.168.250.0/24 -d 192.168.150.0/24 -j ACCEPT PostDown = iptables -D FORWARD -i %i -o enp0s8 -s 192.168.150.0/24 -d 192.168.250.0/24 -j ACCEPT [Peer] # публичный ключ сервера PublicKey = dp9cddCMlwoF4oOBO+6aoXZfwQhqJr6W5vv6LYu5GHk= # ip-адрес и порт сервера Endpoint = 123.123.123.123:54321 # принимать пакеты с такими ip-адресами источника от сервера, # отправлять пакеты с такими ip-адресами назначения серверу AllowedIPs = 10.8.0.0/24, 192.168.150.0/24 # поддерживать соединение в активном состоянии, # каждые 25 секунд отправлять пакет на сервер PersistentKeepalive = 25
После запуска службы мы выполянем команды, которые
- разрешат компьютерам сети
192.168.250.0/24
отправлять пакеты VPN-клиентам - разрешат компьютерам сети
192.168.250.0/24
получать пакеты от VPN-клиентов - разрешат компьютерам сети
192.168.250.0/24
отправлять пакеты в сеть192.168.150.0/24
- разрешат компьютерам сети
192.168.250.0/24
получать пакеты из сети192.168.150.0/24
5. Проверяем, как все работает
Выполянем ping
с компьютера pc5
:
$ ping -c3 192.168.150.2 PING 192.168.150.2 (192.168.150.2) 56(84) bytes of data. 64 bytes from 192.168.150.2: icmp_seq=1 ttl=62 time=29.8 ms 64 bytes from 192.168.150.2: icmp_seq=2 ttl=62 time=30.7 ms 64 bytes from 192.168.150.2: icmp_seq=3 ttl=62 time=27.9 ms --- 192.168.150.2 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2005ms rtt min/avg/max/mdev = 27.894/29.452/30.688/1.163 ms
$ ping -c3 192.168.250.2 PING 192.168.250.2 (192.168.250.2) 56(84) bytes of data. 64 bytes from 192.168.250.2: icmp_seq=1 ttl=62 time=29.2 ms 64 bytes from 192.168.250.2: icmp_seq=2 ttl=62 time=29.2 ms 64 bytes from 192.168.250.2: icmp_seq=3 ttl=62 time=27.4 ms --- 192.168.250.2 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2004ms rtt min/avg/max/mdev = 27.391/28.571/29.173/0.834 ms
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 12 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 11 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 10 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 9 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 8 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 7 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 6 из 12
Поиск: Linux • Ubuntu • VPN • WireGuard • Клиент • Ключ • Конфигурация • Маршрутизация • Настройка • Сервер • Установка