Установка OpenVPN на Ubuntu 18.04 LTS. Часть 8 из 12
29.07.2020
Теги: Linux • SSL • Ubuntu • VPN • Клиент • Ключ • Конфигурация • ЛокальнаяСеть • Маршрутизация • Настройка • Сервер • Установка
Допустим, что в силу каких-то причин мы не можем установить VPN-клиенты на маршрутизаторы gateway1
и gateway2
. И мы вынуждены установить VPN-клиенты на два отдельных сервера внутри сетей 192.168.150.0/24
и 192.168.250.0/24
. В этом случае нам нужны дополнительные маршруты, чтобы компьютеры двух сетей могли общаться между собой.
Настройка gateway1
Остановим службу VPN-клиента и удалим из автозагрузки:
$ sudo systemctl stop openvpn-client@config.service $ sudo systemctl disable openvpn-client@config.service
Удалим ранее созданные правила netfilter
для таблицы filter
:
$ sudo iptables -t filter -F $ sudo iptables -P FORWARD ACCEPT $ sudo iptables-save > /etc/iptables/rules.v4
Правило SNAT для таблицы nat
не трогаем, оно по-прежнему нужно:
$ sudo iptables -t nat -L -v --line-numbers .......... Chain POSTROUTING (policy ACCEPT 59 packets, 4330 bytes) num pkts bytes target prot opt in out source destination 1 70 4848 MASQUERADE all -- any enp0s3 anywhere anywhere
Настройка gateway2
Остановим службу VPN-клиента и удалим из автозагрузки:
$ sudo systemctl stop openvpn-client@config.service $ sudo systemctl disable openvpn-client@config.service
Удалим ранее созданные правила netfilter
для таблицы filter
:
$ sudo iptables -t filter -F $ sudo iptables -P FORWARD ACCEPT $ sudo iptables-save > /etc/iptables/rules.v4
Правило SNAT для таблицы nat
не трогаем, оно по-прежнему нужно:
$ sudo iptables -t nat -L -v --line-numbers .......... Chain POSTROUTING (policy ACCEPT 36 packets, 2538 bytes) num pkts bytes target prot opt in out source destination 1 39 2557 MASQUERADE all -- any enp0s3 anywhere anywhere
Настройка vpn-center
После установки пакета openvpn
копируем с vpn-server
файлы:
$ 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/pki/private/vpn-client-center-office.key /etc/openvpn/keys/ $ sudo scp evgeniy@123.123.123.123:/home/evgeniy/easy-rsa/pki/issued/vpn-client-center-office.crt /etc/openvpn/keys/ $ sudo scp evgeniy@123.123.123.123:/home/evgeniy/easy-rsa/ta.key /etc/openvpn/keys/
Теперь создаем файл конфигурации VPN-клиента:
$ sudo nano /etc/openvpn/client/config.conf
# это макрокоманда, преобразуется в директивы pull и tls-client client # работа по протоколу UDP (для работы по TCP нужно указать tcp-client) proto udp # сетевой интерфейс TUN (или TAP) dev tun # ip-адрес и порт сервера remote 123.123.123.123 1194 # если не удалось получить ip-адрес сервера от DNS, то через указанное # количество секунд попытаться снова; infinite — повторять бесконечно resolv-retry infinite # использовать динамический порт для подключения к серверу (клиенту не # требуется привязка к определенному порту) nobind # корневой сертификат ca /etc/openvpn/keys/ca.crt # сертификат клиента cert /etc/openvpn/keys/vpn-client-center-office.crt # приватный ключ клиента key /etc/openvpn/keys/vpn-client-center-office.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 # по умолчанию логи идут в syslog; использование одной из директив ниже # предписывает вести отдельный лог; первая — перезаписывать файл лога, # вторая — дополнять файл лога; можно использовать только одну директиву #log /var/log/openvpn/openvpn.log #log-append /var/log/openvpn/openvpn.log # уровень детализации лога от 0 до 11; если 0 — тогда только фатальные ошибки; # при настройке установить значение 4-11, при эксплуатации — 0 или 1 verb 3
Все готово, можно запускать VPN-клиент:
$ sudo systemctl start openvpn-client@config.service
Добавим запуск клиента в автозагрузку:
$ sudo systemctl enable openvpn-client@config.service
Настройка vpn-branch
После установки пакета openvpn
копируем с vpn-server
файлы:
$ 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/pki/private/vpn-client-branch-office.key /etc/openvpn/keys/ $ sudo scp evgeniy@123.123.123.123:/home/evgeniy/easy-rsa/pki/issued/vpn-client-branch-office.crt /etc/openvpn/keys/ $ sudo scp evgeniy@123.123.123.123:/home/evgeniy/easy-rsa/ta.key /etc/openvpn/keys/
Теперь создаем файл конфигурации VPN-клиента:
$ sudo nano /etc/openvpn/client/config.conf
# это макрокоманда, преобразуется в директивы pull и tls-client client # работа по протоколу UDP (для работы по TCP нужно указать tcp-client) proto udp # сетевой интерфейс TUN (или TAP) dev tun # ip-адрес и порт сервера remote 123.123.123.123 1194 # если не удалось получить ip-адрес сервера от DNS, то через указанное # количество секунд попытаться снова; infinite — повторять бесконечно resolv-retry infinite # использовать динамический порт для подключения к серверу (клиенту не # требуется привязка к определенному порту) nobind # корневой сертификат ca /etc/openvpn/keys/ca.crt # сертификат клиента cert /etc/openvpn/keys/vpn-client-branch-office.crt # приватный ключ клиента key /etc/openvpn/keys/vpn-client-branch-office.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 # по умолчанию логи идут в syslog; использование одной из директив ниже # предписывает вести отдельный лог; первая — перезаписывать файл лога, # вторая — дополнять файл лога; можно использовать только одну директиву #log /var/log/openvpn/openvpn.log #log-append /var/log/openvpn/openvpn.log # уровень детализации лога от 0 до 11; если 0 — тогда только фатальные ошибки; # при настройке установить значение 3 или 4, при эксплуатации — 0 или 1 verb 3
Все готово, можно запускать VPN-клиент:
$ sudo systemctl start openvpn-client@config.service
Добавим запуск клиента в автозагрузку:
$ sudo systemctl enable openvpn-client@config.service
Форвардинг для vpn-center и vpn-branch
Пакеты, которые приходят на интерфейсы VPN-клиента vpn-center
, и которые ему не предназначены, он должен отправлять дальше. Пакеты из туннеля — в сеть 192.168.150.0/24
, пакеты из сети 192.168.150.0/24
— в туннель.
$ 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 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 10.8.0.0/24 -d 192.168.150.0/24 -j ACCEPT
Правила нужно сохранить и восстанавливать при перезагрузке:
$ sudo apt install iptables-persistent
Пакеты, которые приходят на интерфейсы VPN-клиента vpn-branch
, и которые ему не предназначены, он должен отправлять дальше. Пакеты из туннеля — в сеть 192.168.250.0/24
, пакеты из сети 192.168.250.0/24
— в туннель.
$ 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 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 10.8.0.0/24 -d 192.168.250.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.250.0/24
— через сервер vpn-center
:
$ sudo ip route add 192.168.250.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
А на компьютерах pc3
и pc4
— добавить маршрут до 192.168.150.0/24
— через сервер vpn-branch
:
$ sudo ip route add 192.168.150.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
Но это не очень удобно — лучше пусть все компьютеры отправляют пакеты в шлюз по умолчанию, а нужные маршруты мы добавим на gateway1
и gateway2
:
$ sudo ip route add 192.168.250.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 10.8.0.0/24 via 192.168.250.254 dev enp0s8 # на gateway2
Файлы конфигурации сети
Сейчас все работает, но добавленные маршруты пропадут при перезагрузке gateway1
и gateway2
. Так что нам нужно прописать эти маршруты в файлах конфигурации сети:
$ sudo nano /etc/netplan/01-netcfg.yaml
# файл конфигурации сети gateway1 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] routes: # маршрут до сети 192.168.250.0/24 - to: 192.168.250.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]
$ sudo nano /etc/netplan/01-netcfg.yaml
# файл конфигурации сети gateway2 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] routes: # маршрут до сети 192.168.150.0/24 - to: 192.168.150.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]
Еще один VPN-клиент pc5
И напоследок проверим, что там с VPN-клиентом 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=63 time=65.8 ms 64 bytes from 192.168.150.2: icmp_seq=2 ttl=63 time=26.8 ms 64 bytes from 192.168.150.2: icmp_seq=3 ttl=63 time=28.1 ms --- 192.168.150.2 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2004ms rtt min/avg/max/mdev = 26.804/40.272/65.837/18.086 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=63 time=30.3 ms 64 bytes from 192.168.250.2: icmp_seq=2 ttl=63 time=27.3 ms 64 bytes from 192.168.250.2: icmp_seq=3 ttl=63 time=27.4 ms --- 192.168.250.2 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 27.366/28.404/30.374/1.400 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. Часть 7 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 6 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 5 из 12
Поиск: Linux • SSL • Ubuntu • VPN • Клиент • Ключ • Конфигурация • Локальная сеть • Маршрутизация • Настройка • Сервер • Установка • Сертификат