Запуск нескольких серверов OpenVPN

OpenVPN Logo

Иногда может понадобиться запустить сразу несколько OpenVPN серверов на одной машине для решения разных задач. Сделать это очень просто и для этого не потребуется устанавливать ничего лишнего.

Установив OpenVPN сервер по этому туториалу, мы получили одну копию сервера, принимающую соединения UDP на порт 1194. Для того, чтобы получить дополнительные сервера и переместить их на другие порты, нужно немного подредактировать файлы настроек.

В этой статье я разберу способ запуска двух серверов: один - TCP на порту 50001 и второй - UDP на порту 50002. А так этот способ подходит для запуска любого количества серверов.

1. Отключение текущего сервера OpenVPN

Для порядка я отключил автозагрузку стандартного сервера OpenVPN, чтобы он не мешался в будущем и чтобы можно было быстро запустить сервер на стандартном порту, если это будет необходимо. Запускается сервер скриптом из /etc/init.d и отключить его можно всего двумя командами:

sudo service openvpn stop #останавливаем сервер
sudo update-rc.d openvpn disable #отключаем запуск

После этого сервер перестанет запускаться при загрузке.

2. Файлы настроек

Теперь нам нужно сделать два файла настроек из текущего server.conf (по конфигу на каждый сервер). Для этого нам нужно перейти в директорию с настройками OpenVPN и скопировать текущий server.conf:

cd /etc/openvpn #переходим в директорию с настройками
sudo cp server.conf server-tcp.conf #настройки для TCP
sudo cp server.conf server-udp.conf #настройки для UDP

3. Настройка серверов

Для того, чтобы сервера могли уживаться в одной системе, они должны принимать соединения на разных портах. Для примера я буду использовать 50001 и 50002 для TCP и UDP соответственно.

Настройка TCP сервера

Откроем файл server-tcp.conf для редактирования командой

sudo nano server-tcp.conf

Нам нужно изменить всего четыре строки: порт, протокол и подсеть, из которой будут выдаваться IP адреса для клиентов.

#Находим строку
port 1194
#и меняем номер порта на 50001
port 50001
#Находим две строки с протоколами:
;proto tcp
proto udp
#и меняем UDP на TCP:
proto tcp
;proto udp

Теперь нужно указать другую подсеть, из которой будут выдаваться IP адреса для клиентов, подключающихся к этому серверу. Указанная подсеть не должна использоваться другими серверами, так как это приведет к конфликту.

# Находим строку:
server 10.8.0.0 255.255.255.0
# и меняем в ней адрес подсети на 10.8.1.0
server 10.8.1.0 255.255.255.0

Для сохранения файла нужно нажать сочетание клавиш Ctrl+X.

Настройка UDP сервера

Со вторым сервером все аналогично. Открываем файл server-udp.conf:

sudo nano server-udp.conf

Изменения в этом файле будут происходить на тех же строках, что и в server-tcp.conf. Нам нужно указать другой порт и другую подсеть. Протокол по умолчанию - UDP, поэтому менять его не будем.

# Находим строку
port 1194
# и меняем номер порта на 50001
port 50002
# Проверяем, чтобы строки с протоколом выглядели так:
;proto tcp
proto udp
# Находим строку с подсетью:
server 10.8.0.0 255.255.255.0
# и меняем IP на 10.8.2.0
server 10.8.2.0 255.255.255.0

Сохранить файл можно опять же нажатием Ctrl+X.

4. Запуск всех серверов при загрузке

После того, как все сервера настроены, нужно включить их автозагрузку, как это было со стандартным сервером.

Сервера можно запустить вручную, чем мы и воспользуемся. Команда для запуска определенного сервера зависит от названия файла его конфигурации:

# Для сервера с конфигом server-tcp.conf:
sudo service openvpn start server-tcp
# И для сервера с конфигом server-udp.conf
sudo service openvpn start server-udp
# Без параметра она запускает сервер с server.conf
sudo service openvpn start

Для того, чтобы сервера запускались самостоятельно при загрузке системы, мы добавим эти команды в конец файла /etc/rc.local. Открыть его можно командой:

sudo nano /etc/rc.local

Просто впишем обе команды в конец этого файла, но до exit 0:

sudo service openvpn start server-tcp
sudo service openvpn start server-udp

exit 0

5. Открытие доступа в интернет для клиентов

Так как мы указали другие подсети, iptables не пустит клиентов этих серверов в интернет. Но это можно решить всего тремя командами для каждой подсети:

# Для 10.8.1.0:
iptables -A FORWARD -s 10.8.1.0/24 -j ACCEPT
iptables -A FORWARD -d 10.8.1.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.1.0/24 -j SNAT --to-source 192.168.1.22
# И для 10.8.2.0:
iptables -A FORWARD -s 10.8.2.0/24 -j ACCEPT
iptables -A FORWARD -d 10.8.2.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.2.0/24 -j SNAT --to-source 192.168.1.22

Эти команды нужно вводить после каждой перезагрузки, поэтому мы просто добавим их в /etc/rc.local тем же способом, что и в пункте 4.

Заключение

Теперь оба сервера настроены и готовы к работе. Эта схема успешно работает у меня на Raspberry Pi, через которую я попадаю из внешнего мира в домашнюю сеть.

Как всегда писал я это по памяти, поэтому если у вас что-то не получилось или вы нашли ошибку, пишите её в комментарии - исправлю и помогу.

Спасибо за внимание :3