Установка OpenVPN на Ubuntu 18.04 LTS. Часть 12 из 12
14.08.2020
Теги: Linux • SSL • Ubuntu • VPN • Клиент • Ключ • Конфигурация • ЛокальнаяСеть • Маршрутизация • Настройка • Сервер • Установка
Допустим, что в силу каких-то причин мы не можем установить VPN-сервер на маршрутизатор gateway1
, а VPN-клиентов — на маршрутизаторы gateway2
и gateway3
. И вынуждены установить сервер и клиенты на три отдельных сервера внутри наших сетей. В этом случае нам нужны дополнительные маршруты, чтобы компьютеры трех сетей могли общаться между собой.
Настройка маршрутизатора gateway1
Остановим службу VPN-сервера и удалим из автозагрузки:
$ sudo systemctl stop openvpn-server@config.service $ sudo systemctl disable openvpn-server@config.service
Удалим все правила из таблицы filter
и вместо них добавим новые:
$ sudo iptables -t filter -F
$ 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-save > /etc/iptables/rules.v4
$ sudo iptables -L -v --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain FORWARD (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all -- enp0s8 enp0s3 192.168.150.0/24 anywhere 2 0 0 ACCEPT all -- enp0s3 enp0s8 anywhere 192.168.150.0/24 Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination
Правило SNAT для таблицы nat
не трогаем, оно по-прежнему нужно:
$ sudo iptables -t nat -L -v --line-numbers .......... Chain POSTROUTING (policy ACCEPT 41 packets, 2926 bytes) num pkts bytes target prot opt in out source destination 1 94 6416 MASQUERADE all -- any enp0s3 anywhere anywhere
VPN-клиенты будут обращаться к VPN-серверу по ip-адресу 123.123.123.123
. Но по этому ip-адресу VPN-сервера уже нет. Поэтому маршрутизатор gateway1
должен пробрасывать UDP-соединения от VPN-клиентов внутрь сети — к VPN-серверу:
$ sudo iptables -t nat -A PREROUTING -i enp0s3 -p udp --dport 1194 -j DNAT --to-destination 192.168.150.254
Настройка маршрутизатора gateway2
Остановим службу VPN-клиента и удалим из автозагрузки:
$ sudo systemctl stop openvpn-client@config.service $ sudo systemctl disable openvpn-client@config.service
Удалим все правила из таблицы filter
и вместо них добавим новые:
$ sudo iptables -t filter -F
$ 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-save > /etc/iptables/rules.v4
$ sudo iptables -L -v --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain FORWARD (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all -- enp0s8 enp0s3 192.168.250.0/24 anywhere 2 0 0 ACCEPT all -- enp0s3 enp0s8 anywhere 192.168.250.0/24 Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination
Правило SNAT для таблицы nat
не трогаем, оно по-прежнему нужно:
$ sudo iptables -t nat -L -v --line-numbers .......... Chain POSTROUTING (policy ACCEPT 48 packets, 3316 bytes) num pkts bytes target prot opt in out source destination 1 101 6942 MASQUERADE all -- any enp0s3 anywhere anywhere
Настройка маршрутизатора gateway3
Остановим службу VPN-клиента и удалим из автозагрузки:
$ sudo systemctl stop openvpn-client@config.service $ sudo systemctl disable openvpn-client@config.service
Удалим все правила из таблицы filter
и вместо них добавим новые:
$ sudo iptables -t filter -F
$ sudo iptables -A FORWARD -i enp0s8 -o enp0s3 -s 192.168.50.0/24 -j ACCEPT $ sudo iptables -A FORWARD -i enp0s3 -o enp0s8 -d 192.168.50.0/24 -j ACCEPT
$ sudo iptables-save > /etc/iptables/rules.v4
$ sudo iptables -L -v --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain FORWARD (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all -- enp0s8 enp0s3 192.168.50.0/24 anywhere 2 0 0 ACCEPT all -- enp0s3 enp0s8 anywhere 192.168.50.0/24 Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination
Правило SNAT для таблицы nat
не трогаем, оно по-прежнему нужно:
$ sudo iptables -t nat -L -v --line-numbers .......... Chain POSTROUTING (policy ACCEPT 48 packets, 3406 bytes) num pkts bytes target prot opt in out source destination 1 104 7181 MASQUERADE all -- any enp0s3 anywhere anywhere
Настройка VPN-сервера openvpn1
После установки пакета openvpn
копируем ключи и сертификаты из центра сертификации:
$ sudo mkdir /etc/openvpn/keys/ # создаем директорию для ключей и сертификатов $ sudo scp evgeniy@192.168.150.1:/home/evgeniy/easy-rsa/pki/ca.crt /etc/openvpn/keys/ $ sudo scp evgeniy@192.168.150.1:/home/evgeniy/easy-rsa/pki/private/center-office-gw1.key /etc/openvpn/keys/openvpn1.key $ sudo scp evgeniy@192.168.150.1:/home/evgeniy/easy-rsa/pki/issued/center-office-gw1.crt /etc/openvpn/keys/openvpn1.crt $ sudo scp evgeniy@192.168.150.1:/home/evgeniy/easy-rsa/pki/dh.pem /etc/openvpn/keys/ $ sudo scp evgeniy@192.168.150.1:/home/evgeniy/easy-rsa/ta.key /etc/openvpn/keys/
У меня файл закрытого ключа будет openvpn1.key
, а файл открытого ключа — openvpn1.crt
. Вообще, при изменении имени файла ключа или сертификата надо помнить, что CommonName останется прежним — таким, как было задано при создании. А CommonName используется в качестве имени файла конфигурации клиента на сервере, в директории client-config-dir
. В нашем случае это неважно, потому что мы используем UserName — вспомните директиву username-as-common-name
.
Если мы изменяем имена файлов закрытого и открытого ключа для клиента, и при этом используем аутентификацию по сертификатам, то в файле конфигурации клиента указываем новые имена файлов. А в качестве имени файла конфигурации клиента на сервере в директории client-config-dir
— используем CommonName, которое не изменилось. Получается путаница, поэтому имена файлов лучше не менять. Здесь это правило нарушено — но не хотелось выпускать новый сертификат для сервера.
Создаем файл конфигурации сервера:
$ sudo nano /etc/openvpn/server/config.conf
# включить режим сервера с многими клиентами mode server # использовать топологию subnet, вместо дефолтной net30 topology subnet # сообщить клиентам, что используется топология subnet push "topology subnet" # назначить серверу первый адрес виртуальной сети ifconfig 10.8.0.1 255.255.255.0 # 100 ip-адресов виртуальной сети выделить клиентам ifconfig-pool 10.8.0.11 10.8.0.110 255.255.255.0 # для клиентов шлюзом по умолчанию будет сервер push "route-gateway 10.8.0.1" # установить для сервера маршрут до сети за клиентом gateway2 route 192.168.250.0 255.255.255.0 10.8.0.2 # установить для сервера маршрут до сети за клиентом gateway3 route 192.168.50.0 255.255.255.0 10.8.0.3 # разрешить клиентам общаться между собой, а не только с сервером client-to-client # сообщить всем клиентам маршрут до сети за сервером gateway1 push "route 192.168.150.0 255.255.255.0 10.8.0.1" # сообщить всем клиентам маршрут до сети за клиентом gateway2 push "route 192.168.250.0 255.255.255.0 10.8.0.1" # сообщить всем клиентам маршрут до сети за клиентом gateway3 push "route 192.168.50.0 255.255.255.0 10.8.0.1" # одновременно могут быть подключены 100 клиентов max-clients 100 # файл для хранения ip-адресов клиентов ifconfig-pool-persist /var/log/openvpn/ipp.txt # ip-адрес, на котором нужно принимать соединения от клиентов local 192.168.150.254 # порт, на котором работает сервер port 1194 # работа по протоколу UDP (для TCP нужно указать tcp-server) proto udp4 # сетевой интерфейс TUN (или TAP) dev tun # включить TLS и при handshake представляться как сервер; # TLS используется только для шифрования канала управления tls-server # корневой сертификат ca /etc/openvpn/keys/ca.crt # сертификат сервера cert /etc/openvpn/keys/openvpn1.crt # приватный ключ сервера key /etc/openvpn/keys/openvpn1.key # добавляет дополнительную подпись HMAC ко всем пакетам handshake для # проверки целостности; любой пакет, не имеющий правильной HMAC-подписи, # будет отброшен без дальнейшей обработки; это для доп.безопасности tls-auth /etc/openvpn/keys/ta.key # направление ключа: для сервера — 0, для клиента — 1 key-direction 0 # ключ Диффи-Хеллмана dh /etc/openvpn/keys/dh.pem # использовать алгоритм AES-256-GCM шифрования пакетов канала данных; # на данный момент это самый безопасный и быстрый алгоритм шифрования cipher AES-256-GCM # отключить согласование шифров между клиентом и сервером; так делать нельзя, # если есть старые клиенты, которые не поддерживают AES-256-GCM; кроме того, # если согласование разрешено, сервер и клиент версии 2.4 и выше могут # автоматически обновить алгоритм шифрования до более нового и безопасного #ncp-disable # алгоритм хеширования — для проверки целостности передаваемых пакетов # канала данных и (если включено tls-auth) пакетов канала управления auth SHA256 # читать файлы конфигураций клиентов в этой директории client-config-dir /etc/openvpn/ccd # использовать новый алгоритм сжатия compress lz4-v2 # и сообщить об этом всем клиентам push "compress lz4-v2" # пользователь и группа с минимальными правами — для большей безопасности user nobody group nogroup # не перечитывать файлы ключей при восстановлении туннеля после разрыва persist-key # оставлять без изменения устройства tun или tap при перезапуске службы persist-tun # каждые 10 секунд отправлять ping-запрос на удаленный узел; если нет # ответа 60*2=120 секунд — перезапускать туннель keepalive 10 60 # файл статуса, содержит текущие соединения; перезаписывается каждую минуту status /var/log/openvpn/openvpn-status.log # предупреждать клиентов, что сервер перезапускается, чтобы клиенты могли # автоматически переподключиться (только при работе по протоколу UDP) explicit-exit-notify 1 # разрешить выполнение внешних скриптов (то есть verify.sh) script-security 2 # путь к скрипту, который будет выполнять проверку логина-пароля auth-user-pass-verify /etc/openvpn/auth/verify.sh via-file # при проверке логина-пароля не запрашивать сертификат клиента verify-client-cert none # использовать UserName вместо CommonName сертификата клиента username-as-common-name # директория для временных файлов с логином и паролем клиента tmp-dir /etc/openvpn/auth/tmp
Создаем два файла в директории client-config-dir
:
$ sudo nano /etc/openvpn/ccd/openvpn2
# назначить клиенту openvpn2 второй ip-адрес виртуальной VPN-сети ifconfig-push 10.8.0.2 255.255.255.0 # сообщить серверу, что за этим клиентом есть сеть 192.168.250.0/24 iroute 192.168.250.0 255.255.255.0
$ sudo nano /etc/openvpn/ccd/openvpn3
# назначить клиенту openvpn3 третий ip-адрес виртуальной VPN-сети ifconfig-push 10.8.0.3 255.255.255.0 # сообщить серверу, что за этим клиентом есть сеть 192.168.50.0/24 iroute 192.168.50.0 255.255.255.0
Создаем скрипт проверки verify.sh
и даем ему права на выполнение:
$ sudo mkdir -p /etc/openvpn/auth/tmp $ sudo nano /etc/openvpn/auth/verify.sh
#!/bin/bash
username=`head -1 $1`
password=`tail -1 $1`
if [[ -z $username || -z $password ]]; then
exit 1
fi
users=`cat /etc/openvpn/auth/users.pass`
for user in $users; do
if [[ "$user" = "$username:$password" ]]; then
exit 0
fi
done
exit 1
$ sudo chmod a+x /etc/openvpn/auth/verify.sh
Предоставляем права на запись в директорию tmp-dir
временного файла с логином и паролем — когда сервер уже будет работать от nobody
и nogroup
:
$ sudo chmod a+w /etc/openvpn/auth/tmp
И создаем файл users.pass
для хранения логинов и паролей клиентов:
$ sudo nano /etc/openvpn/auth/users.pass
openvpn2:abcdef123456 openvpn3:fedcba654321 sergey-ivanov:uvwxyz456789 andrey-petrov:qwerty123456
Все готово, можно запускать VPN-сервер:
$ sudo systemctl start openvpn-server@config.service
Добавим запуск сервера в автозагрузку:
$ sudo systemctl enable openvpn-server@config.service
Теперь сервер openvpn3
будет маршртутизатором, поэтому разрешаем пересылку пакетов между интерфейсами:
$ sudo nano /etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
Чтобы внесенные изменения вступили в силу:
$ sudo sysctl -p net.ipv4.ip_forward = 1
Добавляем правила для netfilter
с помощью утилиты iptables
:
$ sudo iptables -P FORWARD DROP
$ sudo iptables -A FORWARD -i enp0s3 -o tun0 -s 192.168.150.0/24 -d 192.168.250.0/24 -j ACCEPT $ sudo iptables -A FORWARD -i enp0s3 -o tun0 -s 192.168.150.0/24 -d 192.168.50.0/24 -j ACCEPT $ sudo iptables -A FORWARD -i enp0s3 -o tun0 -s 192.168.150.0/24 -d 10.8.0.0/24 -j ACCEPT $ sudo iptables -A FORWARD -i tun0 -o enp0s3 -s 192.168.250.0/24 -d 192.168.150.0/24 -j ACCEPT $ sudo iptables -A FORWARD -i tun0 -o enp0s3 -s 192.168.50.0/24 -d 192.168.150.0/24 -j ACCEPT $ sudo iptables -A FORWARD -i tun0 -o enp0s3 -s 10.8.0.0/24 -d 192.168.150.0/24 -j ACCEPT
Правила нужно сохранить и восстанавливать при перезагрузке:
$ sudo apt install iptables-persistent
Настройка VPN-клиента openvpn2
Переходим на openvpn2
и после установки пакета openvpn
копируем с gateway1
следующие файлы:
$ sudo mkdir /etc/openvpn/keys/ # создаем директорию для ключей и сертификатов $ sudo scp evgeniy@123.123.123.123:/home/evgeniy/easy-rsa/pki/ca.crt /etc/openvpn/keys/ $ sudo scp evgeniy@123.123.123.123:/home/evgeniy/easy-rsa/ta.key /etc/openvpn/keys/
Создаем файл конфигурации клиента:
$ sudo nano /etc/openvpn/client/config.conf
# работа по протоколу UDP (для TCP нужно указать tcp-client) proto udp4 # сетевой интерфейс TUN (или TAP) dev tun # принимать от сервера команды push, например маршруты pull # ip-адрес и порт сервера remote 123.123.123.123 1194 # если не удалось получить ip-адрес сервера от DNS, то через указанное # количество секунд попытаться снова; infinite — повторять бесконечно resolv-retry infinite # использовать динамический порт для подключения к серверу (клиенту не # требуется привязка к определенному порту) nobind # отбрасываем маршрут до сети, который не нужен клиенту openvpn2 pull-filter ignore "route 192.168.250.0 255.255.255.0 10.8.0.1" # включить TLS и при handshake представляться как клиент; # TLS используется только для шифрования канала управления tls-client # корневой сертификат ca /etc/openvpn/keys/ca.crt # обратите внимание, что мы не указываем директивы cert и key #cert /etc/openvpn/keys/openvpn2.crt #key /etc/openvpn/keys/openvpn2.key # для защиты от атаки «человек посередине», когда авторизованный клиент # пытается подключиться к другому клиенту, выдавая себя за сервер; при # указании этой директивы проверяется, что сертификат именно серверный remote-cert-tls server # добавляет дополнительную подпись HMAC ко всем пакетам handshake для # проверки целостности; любой пакет, не имеющий правильной HMAC-подписи, # будет отброшен без дальнейшей обработки; это для доп.безопасности tls-auth /etc/openvpn/keys/ta.key # направление ключа: для клиента — 1, для сервера — 0 key-direction 1 # использовать алгоритм AES-256-GCM шифрования пакетов канала данных; # на данный момент это самый безопасный и быстрый алгоритм шифрования cipher AES-256-GCM # алгоритм хеширования — для проверки целостности передаваемых пакетов # канала данных и (если включено tls-auth) пакетов канала управления auth SHA256 # пользователь и группа с минимальными правами — для большей безопасности user nobody group nogroup # не перечитывать файлы ключей при восстановлении туннеля после разрыва persist-key # оставлять без изменения устройства tun или tap при перезапуске службы persist-tun # логин и пароль клиента размещаем в файле — чтобы отправить их серверу auth-user-pass /etc/openvpn/auth/user.pass
И создаем файл с логином и паролем:
$ sudo nano /etc/openvpn/auth/user.pass
openvpn2 abcdef123456
Все готово, можно запускать VPN-клиент:
$ sudo systemctl start openvpn-client@config.service
Добавим запуск клиента в автозагрузку:
$ sudo systemctl enable openvpn-client@config.service
Теперь сервер openvpn2
будет маршртутизатором, поэтому разрешаем пересылку пакетов между интерфейсами:
$ sudo nano /etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
Чтобы внесенные изменения вступили в силу:
$ sudo sysctl -p net.ipv4.ip_forward = 1
Добавляем правила для netfilter
с помощью утилиты iptables
:
$ sudo iptables -P FORWARD DROP
$ sudo iptables -A FORWARD -i enp0s3 -o tun0 -s 192.168.250.0/24 -d 192.168.150.0/24 -j ACCEPT $ sudo iptables -A FORWARD -i enp0s3 -o tun0 -s 192.168.250.0/24 -d 192.168.50.0/24 -j ACCEPT $ sudo iptables -A FORWARD -i enp0s3 -o tun0 -s 192.168.250.0/24 -d 10.8.0.0/24 -j ACCEPT $ sudo iptables -A FORWARD -i tun0 -o enp0s3 -s 192.168.150.0/24 -d 192.168.250.0/24 -j ACCEPT $ sudo iptables -A FORWARD -i tun0 -o enp0s3 -s 192.168.50.0/24 -d 192.168.250.0/24 -j ACCEPT $ sudo iptables -A FORWARD -i tun0 -o enp0s3 -s 10.8.0.0/24 -d 192.168.250.0/24 -j ACCEPT
Правила нужно сохранить и восстанавливать при перезагрузке:
$ sudo apt install iptables-persistent
Настройка VPN-клиента openvpn3
Переходим на openvpn3
и после установки пакета openvpn
копируем с gateway1
следующие файлы:
$ sudo mkdir /etc/openvpn/keys/ # создаем директорию для ключей и сертификатов $ sudo scp evgeniy@123.123.123.123:/home/evgeniy/easy-rsa/pki/ca.crt /etc/openvpn/keys/ $ sudo scp evgeniy@123.123.123.123:/home/evgeniy/easy-rsa/ta.key /etc/openvpn/keys/
Создаем файл конфигурации клиента:
$ sudo nano /etc/openvpn/client/config.conf
# работа по протоколу UDP (для TCP нужно указать tcp-client) proto udp4 # сетевой интерфейс TUN (или TAP) dev tun # принимать от сервера команды push, например маршруты pull # ip-адрес и порт сервера remote 123.123.123.123 1194 # если не удалось получить ip-адрес сервера от DNS, то через указанное # количество секунд попытаться снова; infinite — повторять бесконечно resolv-retry infinite # использовать динамический порт для подключения к серверу (клиенту не # требуется привязка к определенному порту) nobind # отбрасываем маршрут до сети, который не нужен клиенту openvpn3 pull-filter ignore "route 192.168.50.0 255.255.255.0 10.8.0.1" # включить TLS и при handshake представляться как клиент; # TLS используется только для шифрования канала управления tls-client # корневой сертификат ca /etc/openvpn/keys/ca.crt # обратите внимание, что мы не указываем директивы cert и key #cert /etc/openvpn/keys/openvpn3.crt #key /etc/openvpn/keys/openvpn3.key # для защиты от атаки «человек посередине», когда авторизованный клиент # пытается подключиться к другому клиенту, выдавая себя за сервер; при # указании этой директивы проверяется, что сертификат именно серверный remote-cert-tls server # добавляет дополнительную подпись HMAC ко всем пакетам handshake для # проверки целостности; любой пакет, не имеющий правильной HMAC-подписи, # будет отброшен без дальнейшей обработки; это для доп.безопасности tls-auth /etc/openvpn/keys/ta.key # направление ключа: для клиента — 1, для сервера — 0 key-direction 1 # использовать алгоритм AES-256-GCM шифрования пакетов канала данных; # на данный момент это самый безопасный и быстрый алгоритм шифрования cipher AES-256-GCM # алгоритм хеширования — для проверки целостности передаваемых пакетов # канала данных и (если включено tls-auth) пакетов канала управления auth SHA256 # пользователь и группа с минимальными правами — для большей безопасности user nobody group nogroup # не перечитывать файлы ключей при восстановлении туннеля после разрыва persist-key # оставлять без изменения устройства tun или tap при перезапуске службы persist-tun # логин и пароль клиента размещаем в файле — чтобы отправить их серверу auth-user-pass /etc/openvpn/auth/user.pass
И создаем файл с логином и паролем:
$ sudo nano /etc/openvpn/auth/user.pass
openvpn3 fedcba654321
Все готово, можно запускать VPN-клиент:
$ sudo systemctl start openvpn-client@config.service
Добавим запуск клиента в автозагрузку:
$ sudo systemctl enable openvpn-client@config.service
Теперь сервер openvpn3
будет маршртутизатором, поэтому разрешаем пересылку пакетов между интерфейсами:
$ sudo nano /etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
Чтобы внесенные изменения вступили в силу:
$ sudo sysctl -p net.ipv4.ip_forward = 1
Добавляем правила для netfilter
с помощью утилиты iptables
:
$ sudo iptables -P FORWARD DROP
$ sudo iptables -A FORWARD -i enp0s3 -o tun0 -s 192.168.50.0/24 -d 192.168.150.0/24 -j ACCEPT $ sudo iptables -A FORWARD -i enp0s3 -o tun0 -s 192.168.50.0/24 -d 192.168.250.0/24 -j ACCEPT $ sudo iptables -A FORWARD -i enp0s3 -o tun0 -s 192.168.50.0/24 -d 10.8.0.0/24 -j ACCEPT $ sudo iptables -A FORWARD -i tun0 -o enp0s3 -s 192.168.150.0/24 -d 192.168.50.0/24 -j ACCEPT $ sudo iptables -A FORWARD -i tun0 -o enp0s3 -s 192.168.250.0/24 -d 192.168.50.0/24 -j ACCEPT $ sudo iptables -A FORWARD -i tun0 -o enp0s3 -s 10.8.0.0/24 -d 192.168.50.0/24 -j ACCEPT
Правила нужно сохранить и восстанавливать при перезагрузке:
$ sudo apt install iptables-persistent
Добавление маршрутов
Если мы выполним команду ping 192.168.250.2
на компьютере pc1
— пакеты будут отправлены в шлюз 192.168.150.1
— потому что у pc1
нет маршрута до сети 192.168.250.0/24
. Но маршрутизатор gateway1
тоже не знает, что делать с этими пакетами — у него нет маршрута до сети 192.168.250.0/24
.
Мы можем добавить необходимые маршруты на компьютерах pc1
и pc2
— через сервер 192.168.150.254
:
$ sudo ip route add 192.168.250.0/24 via 192.168.150.254 dev enp0s3 $ sudo ip route add 192.168.50.0/24 via 192.168.150.254 dev enp0s3 $ sudo ip route add 10.8.0.0/24 via 192.168.150.254 dev enp0s3
Удалить добавленные маршруты можно командами
$ sudo ip route del 192.168.250.0/24 via 192.168.150.254 dev enp0s3 $ sudo ip route del 192.168.50.0/24 via 192.168.150.254 dev enp0s3 $ sudo ip route del 10.8.0.0/24 via 192.168.150.254 dev enp0s3
Аналогично добавляем необходимые маршруты на компьютерах pc3
и pc4
— через сервер 192.168.250.254
:
$ sudo ip route add 192.168.150.0/24 via 192.168.250.254 dev enp0s3 $ sudo ip route add 192.168.50.0/24 via 192.168.250.254 dev enp0s3 $ sudo ip route add 10.8.0.0/24 via 192.168.250.254 dev enp0s3
Удалить добавленные маршруты можно командами
$ sudo ip route del 192.168.150.0/24 via 192.168.250.254 dev enp0s3 $ sudo ip route del 192.168.50.0/24 via 192.168.250.254 dev enp0s3 $ sudo ip route del 10.8.0.0/24 via 192.168.250.254 dev enp0s3
Аналогично добавляем необходимые маршруты на компьютерах pc5
и pc6
— через сервер 192.168.50.254
:
$ sudo ip route add 192.168.150.0/24 via 192.168.50.254 dev enp0s3 $ sudo ip route add 192.168.250.0/24 via 192.168.50.254 dev enp0s3 $ sudo ip route add 10.8.0.0/24 via 192.168.250.54 dev enp0s3
Удалить добавленные маршруты можно командами
$ sudo ip route del 192.168.150.0/24 via 192.168.50.254 dev enp0s3 $ sudo ip route del 192.168.250.0/24 via 192.168.50.254 dev enp0s3 $ sudo ip route del 10.8.0.0/24 via 192.168.250.54 dev enp0s3
Но это не очень удобно — лучше пусть все компьютеры отправляют пакеты в шлюз по умолчанию, а нужные маршруты мы добавим на gateway1
, gateway2
и gateway3
:
$ sudo ip route add 192.168.250.0/24 via 192.168.150.254 dev enp0s8 # на gateway1 $ sudo ip route add 192.168.50.0/24 via 192.168.150.254 dev enp0s8 # на gateway1 $ sudo ip route add 10.8.0.0/24 via 192.168.150.254 dev enp0s8 # на gateway1
$ sudo ip route add 192.168.150.0/24 via 192.168.250.254 dev enp0s8 # на gateway2 $ sudo ip route add 192.168.50.0/24 via 192.168.250.254 dev enp0s8 # на gateway2 $ sudo ip route add 10.8.0.0/24 via 192.168.250.254 dev enp0s8 # на gateway2
$ sudo ip route add 192.168.150.0/24 via 192.168.50.254 dev enp0s8 # на gateway3 $ sudo ip route add 192.168.250.0/24 via 192.168.50.254 dev enp0s8 # на gateway3 $ sudo ip route add 10.8.0.0/24 via 192.168.50.254 dev enp0s8 # на gateway3
Мы используем политику DROP
для цепочки FORWARD
таблицы filter
. Для gateway1
это значит, что пакеты для сетей 192.168.250.0/24
, 192.168.50.0/24
и 10.8.0.0/24
, которые придут от pc1
или pc2
на интерфейс enp0s8
и должны уйти с интерфейса enp0s8
в направлении openvpn1
, будут отброшены. Так что на маршрутизаторе gateway1
надо добавить правила для netfilter
:
$ sudo iptables -I FORWARD 1 -i enp0s8 -o enp0s8 -s 192.168.150.0/24 -d 192.168.250.0/24 -j ACCEPT $ sudo iptables -I FORWARD 2 -i enp0s8 -o enp0s8 -s 192.168.150.0/24 -d 192.168.50.0/24 -j ACCEPT $ sudo iptables -I FORWARD 3 -i enp0s8 -o enp0s8 -s 192.168.150.0/24 -d 10.8.0.0/24 -j ACCEPT
$ sudo iptables-save > /etc/iptables/rules.v4
Аналогично, надо добавить правила на маршрутизаторах gateway2
и gateway3
:
$ sudo iptables -I FORWARD 1 -i enp0s8 -o enp0s8 -s 192.168.250.0/24 -d 192.168.150.0/24 -j ACCEPT $ sudo iptables -I FORWARD 2 -i enp0s8 -o enp0s8 -s 192.168.250.0/24 -d 192.168.50.0/24 -j ACCEPT $ sudo iptables -I FORWARD 3 -i enp0s8 -o enp0s8 -s 192.168.250.0/24 -d 10.8.0.0/24 -j ACCEPT
$ sudo iptables-save > /etc/iptables/rules.v4
$ sudo iptables -I FORWARD 1 -i enp0s8 -o enp0s8 -s 192.168.50.0/24 -d 192.168.150.0/24 -j ACCEPT $ sudo iptables -I FORWARD 2 -i enp0s8 -o enp0s8 -s 192.168.50.0/24 -d 192.168.250.0/24 -j ACCEPT $ sudo iptables -I FORWARD 3 -i enp0s8 -o enp0s8 -s 192.168.50.0/24 -d 10.8.0.0/24 -j ACCEPT
$ sudo iptables-save > /etc/iptables/rules.v4
Файлы конфигурации сети
Сейчас все работает, но добавленные маршруты пропадут при перезагрузке маршрутизатора gateway1
, gateway2
или gateway3
. Так что нам нужно прописать эти маршруты в файле конфигурации сети каждого маршрутизатора.
Файл конфигурации сети gateway1
:
$ sudo nano /etc/netplan/01-netcfg.yaml
network: version: 2 renderer: networkd ethernets: enp0s3: dhcp4: no addresses: [123.123.123.123/24] gateway4: 123.123.123.1 nameservers: addresses: [8.8.8.8, 8.8.4.4] enp0s8: dhcp4: no addresses: [192.168.150.1/24] routes: # маршрут до сети 192.168.250.0/24 - to: 192.168.250.0/24 via: 192.168.150.254 # маршрут до сети 192.168.50.0/24 - to: 192.168.50.0/24 via: 192.168.150.254 # маршрут до сети 10.8.0.0/24 - to: 10.8.0.0/24 via: 192.168.150.254 nameservers: addresses: [8.8.8.8, 8.8.4.4]
Файл конфигурации сети gateway2
:
$ sudo nano /etc/netplan/01-netcfg.yaml
network: version: 2 renderer: networkd ethernets: enp0s3: dhcp4: no addresses: [111.111.111.111/24] gateway4: 111.111.111.1 nameservers: addresses: [8.8.8.8, 8.8.4.4] enp0s8: dhcp4: no addresses: [192.168.250.1/24] routes: # маршрут до сети 192.168.150.0/24 - to: 192.168.150.0/24 via: 192.168.250.254 # маршрут до сети 192.168.50.0/24 - to: 192.168.50.0/24 via: 192.168.250.254 # маршрут до сети 10.8.0.0/24 - to: 10.8.0.0/24 via: 192.168.250.254 nameservers: addresses: [8.8.8.8, 8.8.4.4]
Файл конфигурации сети gateway3
:
$ sudo nano /etc/netplan/01-netcfg.yaml
network: version: 2 renderer: networkd ethernets: enp0s3: dhcp4: no addresses: [222.222.222.222/24] gateway4: 222.222.222.1 nameservers: addresses: [8.8.8.8, 8.8.4.4] enp0s8: dhcp4: no addresses: [192.168.50.1/24] routes: # маршрут до сети 192.168.150.0/24 - to: 192.168.150.0/24 via: 192.168.50.254 # маршрут до сети 192.168.250.0/24 - to: 192.168.250.0/24 via: 192.168.50.254 # маршрут до сети 10.8.0.0/24 - to: 10.8.0.0/24 via: 192.168.50.254 nameservers: addresses: [8.8.8.8, 8.8.4.4]
- Установка 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
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 5 из 12
Поиск: Linux • SSL • Ubuntu • VPN • Клиент • Ключ • Конфигурация • Локальная сеть • Маршрутизация • Настройка • Сервер • Установка