SoftEther VPN Server — установка и настройка.

SoftEther VPN появился в далеком 2003 году в университете японского города Цукуба. Проект был разработан одним из студентов университета Daiyu Nobori, после того как в сети университетского кампуса перестал работать PPTP, хотя по другим данным, это был его дипломный проект.

Время шло, проект развивался, и был выкуплен японской корпорацией Mitsubishi, которая подписала десятилетний контракт на выпуск и распространение программы. Однажды SoftEther запретили, правительство Японии посчитало его вредоносной программой.

По окончанию действия контракта с Mitsubishi, в январе 2014 года SoftEther начинает распространяться под свободной GPLv2 лицензией, что делает его доступным для всех желающих.

SoftEther поддерживает почти все туннельные протоколы (L2TP, L2TP/IPsec, MS-SSTP, EtherIP и т.д.). Также у него есть собственный SSL-VPN протокол неотличимый от обычного HTTPS трафика, тут даже системы DPI (Deep Packet Inspection) не помогают, поэтому SoftEther очень популярен в Китае.

SoftEther пробивается через файрволы и NAT механизмы применяя технологии TCP NAT traversal и TCP hole punching, при этом не забывая маскировать трафик. Данные могут передаваться не только с помощью TCP/UDP протоколов, а также с помощью имитации ICMP (пинг) и DNS запросов.

SoftEther не требователен к типам виртуализации, в отличии от OpenVPN, которому для работы требуется наличие TUN/TAP устройств в ядре. Поэтому SoftEther работает на любых VPS/VDS и это еще один плюс в копилку.

Клиентское и серверное ПО существует практически для всех распространенных операционных систем. Процесс компиляции исходного кода при установке в UNIX-системах минимизирован настолько, что с ним легко справится любой пользователь.

ПО SoftEther состоит из нескольких компонентов:

  • Server - самый полный набор, включает в себя Server, Bridge и VPN Server Manager (в версии для Windows).
  • Bridge - позволяет подключать локальные сети к VPN-тоннелям.
  • VPN Server Manager - утилита с графическим интерфейсом в системе Windows. Используется для администрирования локальных и удаленных VPN-серверов. Является самым удобным средством администрирования и управления. Устанавливается отдельно.
  • vpncmd - утилита администрирования командной строки, как в  терминалах UNIX-систем, так и в командной строке Windows. В UNIX-системах ставится вместе с сервером. В Windows идет в комплекте с VPN Server Manager.
  • Client - клиент для подключения к сети VPN.

Установка SoftEther VPN Server

Установим утилиты для компилирования.

# В CentOS

yum groupinstall -y "Development Tools"

# В Ubuntu/Debian

apt-get install -y build-essential

Переходим в каталог /usr/local.

cd /usr/local

Переходим на сайт SoftEther, выбираем нужное и копируем полученную ссылку.

softether vpn server linux

Скачиваем исходники SoftEther.

wget http://www.softether-download.com/files/softether/v4.27-9666-beta-2018.04.21-tree/Linux/SoftEther_VPN_Server/64bit_-_Intel_x64_or_AMD64/softether-vpnserver-v4.27-9666-beta-2018.04.21-linux-x64-64bit.tar.gz

Распаковываем скачанный архив.

tar -zxvf softether-vpnserver-v4.27-9666-beta-2018.04.21-linux-x64-64bit.tar.gz

Переходим в каталог vpnserver.

cd vpnserver

Компилируем и устанавливаем.

make

Во время установки будет задан ряд вопросов, отвечать следует положительно.

Do you want to read the License Agreement for this software ?

 1. Yes
 2. No

Please choose one of above number: 
1

Did you read and understand the License Agreement ?
(If you couldn't read above text, Please read 'ReadMeFirst_License.txt'
 file with any text editor.)

 1. Yes
 2. No

Please choose one of above number: 
1


Did you agree the License Agreement ?

1. Agree
2. Do Not Agree

Please choose one of above number: 
1

Находясь внутри каталога vpnserver зададим права доступа для файлов.

chmod 600 *
chmod 700 vpnserver
chmod 700 vpncmd

Проведем проверку системы на совместимость с SoftEther. Чтобы провести проверку нужно попасть в консоль управления vpncmd.

# Чтобы попасть в консоль

./vpncmd

# На выбор будет предложено три раздела

1. Management of VPN Server or VPN Bridge 
2. Management of VPN Client
3. Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool)

# Нам нужен раздел VPN Tools (3 + Enter)

Select 1, 2 or 3: 3

# Выполняем команду check для проверки

VPN Tools>check
Check command - Check whether SoftEther VPN Operation is Possible
---------------------------------------------------
SoftEther VPN Operation Environment Check Tool

Copyright (c) SoftEther VPN Project.
All Rights Reserved.

If this operation environment check tool is run on a system and that system passes, it is most likely that SoftEther VPN software can operate on that system. This check may take a while. Please wait...

Checking 'Kernel System'... 
              Pass
Checking 'Memory Operation System'... 
              Pass
Checking 'ANSI / Unicode string processing system'... 
              Pass
Checking 'File system'... 
              Pass
Checking 'Thread processing system'... 
              Pass
Checking 'Network system'... 
              Pass

All checks passed. It is most likely that SoftEther VPN Server / Bridge can operate normally on this system.

The command completed successfully.

"All checks passed" означает что тесты пройдены и Softether может работать в системе. Для выхода из консоли используют команды: exit, quit или сочетание клавиш Ctrl+C.

Настройка SoftEther в консоли управления

SoftEther установлен и может работать в системе. Теперь нужно провести начальную настройку, а чтобы провести настройку нужно запустить SoftEther.

Выполняем команду ./vpnserver start находясь внутри каталога /usr/local/vpnserver.

./vpnserver start

Входим в консоль управления.

# Чтобы попасть в консоль
 
./vpncmd
 
# На выбор будет предложено три раздела
 
1. Management of VPN Server or VPN Bridge 
2. Management of VPN Client
3. Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool)
 
# Нам нужен раздел Management of VPN Server or VPN Bridge (1 + Enter)
 
Select 1, 2 or 3: 1

Vpncmd позволяет администрировать не только локальные, но и удаленные сервера. В нашем случае нужно настроить локальный сервер, поэтому в строке Hostname of IP Address of Destination вводим localhost и нажимаем Enter.

Hostname of IP Address of Destination: localhost

По умолчанию соединение устанавливается на 443 порту. Если вдруг 443 порт занят другой программой, такое бывает если SoftEther установлен не на чистую систему, то войти в консоль не получится.

Error occurred. (Error code: 2)
Protocol error occurred. Error was returned from the destination server.

В таком случае к значению localhost через двоеточие добавляют нужный порт. Кроме 443-го порта SoftEther слушает еще три: 992, 1194 и 5555. Можно указать любой из них.

Hostname of IP Address of Destination: localhost:992

Нам будет предложено ввести имя виртуального хаба, но поскольку он еще не создан, то просто нажимаем Enter и оказываемся в консоли управления сервером.

Connection has been established with VPN Server "localhost" (port 443).

You have administrator privileges for the entire VPN Server.

VPN Server>

Управление сервером осуществляется посредством определенных команд (205 штук). Список команд можно просмотреть через --help.

Установка пароля администратора

Первым делом установим пароль администратора (ServerPasswordSet).

VPN Server>ServerPasswordSet
ServerPasswordSet command - Set VPN Server Administrator Password
Please enter the password. To cancel press the Ctrl+D key.

Password: ******
Confirm input: ******

The command completed successfully.

Создание виртуального хаба

Виртуальный хаб представляет собой подобие сервера со своими настройками, протоколами VPN, своими пользователями и администраторами, а также со своими настройками безопасности. На одном сервере может быть создано до 4096 виртуальных хабов. Хабы не контактируют друг с другом, за исключением случаев когда их специально объединяют в мосты.

По умолчанию на сервере уже есть дефолтный хаб (DEFAULT), удалим его (HubDelete) и создадим свой. Во время выполнения будет запрошено имя хаба для удаления.

VPN Server>HubDelete
HubDelete command - Delete Virtual Hub
Name of Virtual Hub to delete: DEFAULT

The command completed successfully.

Создадим новый виртуальный хаб (HubCreate). Зададим имя нового хаба и пароль.

VPN Server>HubCreate
HubCreate command - Create New Virtual Hub
Name of Virtual Hub to be created: VPN_1

Please enter the password. To cancel press the Ctrl+D key.

Password: ******
Confirm input: ******


The command completed successfully.

Список доступных хабов можно просмотреть командой HubList. Команда показывает не только хабы, но и их статистику.

VPN Server>HubList
HubList command - Get List of Virtual Hubs
Item              |Value
------------------+-------------------
Virtual Hub Name  |VPN_1
Status            |Online
Type              |Standalone
Users             |0
Groups            |0
Sessions          |0
MAC Tables        |0
IP Tables         |0
Num Logins        |0
Last Login        |2018-05-10 05:12:36
Last Communication|2018-05-10 05:12:36
Transfer Bytes    |0
Transfer Packets  |0
The command completed successfully.

Настроим созданный хаб (Hub). Через пробел указываем имя хаба для настройки.

VPN Server>Hub VPN_1
Hub command - Select Virtual Hub to Manage
The Virtual Hub "VPN_1" has been selected.
The command completed successfully.

Консоль управления хабом.

VPN Server/VPN_1>

Создадим пользователя (UserCreate). Группу, полное имя и описание заполняем по желанию (можно пропустить нажав Enter).

VPN Server/VPN_1>UserCreate
UserCreate command - Create User 
User Name: denni

Assigned Group Name: 

User Full Name: 

User Description: 

The command completed successfully.

Зададим пароль пользователя (UserPasswordSet).

VPN Server/VPN_1>UserPasswordSet
UserPasswordSet command - Set Password Authentication for User Auth Type and Set Password
User Name: denni

Please enter the password. To cancel press the Ctrl+D key.

Password: ******
Confirm input: ******


The command completed successfully.

Создание локального моста

Поскольку Local Bridge работает совместно с TAP устройством, то данный шаг могут пропустить те пользователи, чьи VPS/VDS не поддерживают драйвера TUN/TAP. Такие пользователи в дальнейшем будут использовать режим SecureNAT.

Использование SecureNAT рассмотрим немного позже, а пока создадим Local Bridge, те кто пропускает переходят сразу к автозапуску.

Для создания Local Bridge используется команда BridgeCreate, синтаксис выглядит следующим образом.

BridgeCreate hubname -device:devicename -tap:yes

hubname - имя хаба (VPN_1)
devicename - имя tap-устройства, например vpn
-tap:yes - включение tap-устройства

Например так.

BridgeCreate VPN_1 -device:vpn -tap:yes

Список и статус мостов можно просмотреть командой Bridgelist. Если в статусе висит значение Operating, это значит что все в порядке и мост готов к работе.

VPN Server/VPN_1>Bridgelist
BridgeList command - Get List of Local Bridge Connection
Number|Virtual Hub Name|Network Adapter or Tap Device Name|Status
------+----------------+----------------------------------+---------
1     |VPN_1           |vpn                               |Operating

После того как Local Bridge создан, в системе должен появиться интерфейс tap_vpn.

ifconfig tap_vpn
tap_vpn: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::2ac:4dff:fe2f:c83f  prefixlen 64  scopeid 0x20<link>
        ether 00:ac:4d:2f:c8:3f  txqueuelen 1000  (Ethernet)
        RX packets 902  bytes 77572 (75.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2263  bytes 187362 (182.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Как можно видеть tap интерфейс пока еще не имеет IPv4 адреса, это нормально, адрес зададим позже.

Если CentOS ругается на отсутствие ifconfig, то нужно поставить. В Debian/Ubuntu пакет присутствует по умолчанию.

yum install -y net-tools

Автозапуск VPN Server

Запускать сервер вручную неудобно. Напишем скрипт для автозапуска сервера.

# Переходим в /usr/local/vpnserver
cd /usr/local/vpnserver

# Останавливаем vpnserver.
./vpnserver stop

Создаем скрипт (vpnserver) в каталоге /etc/init.d.

nano /etc/init.d/vpnserver

Скрипт автозапуска для CentOS

Содержимое скрипта для CentOS.

#!/bin/sh
# chkconfig: 2345 99 01
# description: SoftEther VPN Server
DAEMON=/usr/local/vpnserver/vpnserver
LOCK=/var/lock/subsys/vpnserver
test -x $DAEMON || exit 0
case "$1" in
start)
$DAEMON start
touch $LOCK
;;
stop)
$DAEMON stop
rm $LOCK
;;
restart)
$DAEMON stop
sleep 3
$DAEMON start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0

Права доступа на файл скрипта.

chmod 755 /etc/init.d/vpnserver

Добавим скрипт в автозапуск.

chkconfig --add vpnserver

Запустим vpnserver с помощью systemctl.

systemctl start vpnserver

Проверим как работает.

systemctl status vpnserver
● vpnserver.service - SYSV: SoftEther VPN Server
   Loaded: loaded (/etc/rc.d/init.d/vpnserver; bad; vendor preset: disabled)
   Active: active (running) since Mon 2017-09-25 22:02:58 EDT; 3min 59s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 21190 ExecStart=/etc/rc.d/init.d/vpnserver start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/vpnserver.service
           ├─21193 /usr/local/vpnserver/vpnserver execsvc
           └─21194 /usr/local/vpnserver/vpnserver execsvc

Sep 25 22:02:58 tech systemd[1]: Starting SYSV: SoftEther VPN Server...
Sep 25 22:02:58 tech vpnserver[21190]: The SoftEther VPN Server service has been started.
Sep 25 22:02:58 tech systemd[1]: Started SYSV: SoftEther VPN Server.

Скрипт автозапуска для Ubuntu/Debian

Содержимое скрипта для Ubuntu/Debian.

#!/bin/sh
### BEGIN INIT INFO
# Provides:          vpnserver
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable Softether by daemon.
### END INIT INFO
DAEMON=/usr/local/vpnserver/vpnserver
LOCK=/var/lock/subsys/vpnserver
test -x $DAEMON || exit 0
case "$1" in
start)
$DAEMON start
touch $LOCK
;;
stop)
$DAEMON stop
rm $LOCK
;;
restart)
$DAEMON stop
sleep 3
$DAEMON start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0

Права доступа на файл скрипта.

chmod 755 /etc/init.d/vpnserver

Добавим скрипт в автозапуск.

update-rc.d vpnserver defaults

Запустим vpnserver с помощью systemctl.

systemctl start vpnserver

Проверим как работает.

systemctl status vpnserver
● vpnserver.service - LSB: Start daemon at boot time
   Loaded: loaded (/etc/init.d/vpnserver; bad; vendor preset: enabled)
   Active: active (running) since Tue 2017-09-26 06:44:16 MSK; 56s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 9087 ExecStart=/etc/init.d/vpnserver start (code=exited, status=0/SUCCESS)
    Tasks: 33
   Memory: 14.2M
      CPU: 429ms
   CGroup: /system.slice/vpnserver.service
           ├─9092 /usr/local/vpnserver/vpnserver execsvc
           └─9093 /usr/local/vpnserver/vpnserver execsvc

Sep 26 06:44:16 local systemd[1]: Starting LSB: Start daemon at boot time...
Sep 26 06:44:16 local vpnserver[9087]: The SoftEther VPN Server service has been started.
Sep 26 06:44:16 local systemd[1]: Started LSB: Start daemon at boot time.

Теперь vpnserver будет стартовать самостоятельно после включения или перезагрузки системы и управляться стандартными systemctl-командами.

Сетевые режимы SoftEther VPN Server

У SoftEther есть два механизма передачи трафика: SecureNAT и Local Bridge.

SecureNAT

SecureNAT - собственная технология SoftEther, создающая закрытую сеть и состоящая из двух частей: виртуального NAT и виртуального DHCP-сервера.

securenat softether vpn server linuxSecureNAT не требователен к типу виртуализации VPS/VDS серверов, так как работает без TUN/TAP. Для SecureNAT не нужна настройка iptables или другого фаервола, кроме открытия порта на котором будут приниматься соединения от клиентов.

Маршрутизация трафика осуществляется не затрагивая ядра системы. Все процессы полностью виртуализированы. Отсюда возникают минусы режима, повышенная нагрузка на процессор и потеря в скорости, если сравнивать с Local Bridge.

Пользователю нужно только включить режим, подключить клиент, после чего можно начинать пользоваться VPN.

Активация режима SecureNAT

Чтобы включить режим SecureNAT перейдем в консоль управления хабом и выполним команду SecureNatEnable.

VPN Server/VPN_1>SecureNatEnable
SecureNatEnable command - Enable the Virtual NAT and DHCP Server Function (SecureNat Function)
The command completed successfully.

Узнать текущий статус можно командой SecureNatStatusGet.

VPN Server/VPN_1>SecureNatStatusGet
SecureNatStatusGet command - Get the Operating Status of the Virtual NAT and DHCP Server Function (SecureNat Function)
Item                     |Value
-------------------------+----------
Virtual Hub Name         |VPN_1
NAT TCP/IP Sessions      |40 Session
NAT UDP/IP Sessions      |5 Session
NAT ICMP Sessions        |0 Session
NAT DNS Sessions         |0 Session
Allocated DHCP Clients   |1 Client
Kernel-mode NAT is Active|Yes
Raw IP mode NAT is Active|Yes
The command completed successfully.

Команда показывает количество сессий, подключенных клиентов и текущий статус SecureNAT. Значения "Yes" говорят что режим SecureNAT сейчас активен.

Как я уже писал выше, SecureNAT не требует настройки фаервола для маршрутизации трафика. Достаточно просто открыть порт, на котором vpnserver будет принимать входящие соединения от клиентов.

Добавим правило iptables открывающее 443 порт (или любой другой).

iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

Можно устанавливать клиент, подключаться к серверу, и начинать использовать VPN или немного почитать про сетевые настройки SecureNAT.

Обзор сетевых настроек SecureNAT

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

Текущие сетевые настройки можно узнать командой SecureNatHostGet.

VPN Server/VPN_1>SecureNatHostGet
SecureNatHostGet command - Get Network Interface Setting of Virtual Host of SecureNAT Function
Item       |Value
-----------+-----------------
MAC Address|5E-98-F1-B0-E4-9E
IP Address |192.168.30.1
Subnet Mask|255.255.255.0
The command completed successfully.

По умолчанию SecureNAT использует подсеть 192.168.30.0/24.

Данная подсеть не относится только к SecureNAT, она также используется и в режиме Local Bridge. Это собственная подсеть виртуального хаба. Так что если возникнет необходимость в изменении подсети для моста, то это делается здесь.

Адрес подсети можно изменить командой SecureNatHostSet.

VPN Server/VPN_1>SecureNatHostSet 
SecureNatHostSet command - Change Network Interface Setting of Virtual Host of SecureNAT Function
MAC Address: 

IP Address: 192.168.100.1   

Subnet Mask: 255.255.255.0   

The command completed successfully.

Теперь мы используем подсеть 192.168.100.0/24.

VPN Server/VPN_1>SecureNatHostGet 
SecureNatHostGet command - Get Network Interface Setting of Virtual Host of SecureNAT Function
Item       |Value
-----------+-----------------
MAC Address|5E-98-F1-B0-E4-9E
IP Address |192.168.100.1
Subnet Mask|255.255.255.0
The command completed successfully.

Клиент подключающийся к хабу получает ip-адрес из диапазона его подсети. Раздачей адресов управляет виртуальный DHCP-сервер. Просмотреть текущие настройки DHCP можно командой DhcpGet.

VPN Server/VPN_1>DhcpGet
DhcpGet command - Get Virtual DHCP Server Function Setting of SecureNAT Function
Item                           |Value
-------------------------------+--------------
Use Virtual DHCP Function      |Yes
Start Distribution Address Band|192.168.30.10
End Distribution Address Band  |192.168.30.200
Subnet Mask                    |255.255.255.0
Lease Limit (Seconds)          |7200
Default Gateway Address        |192.168.30.1
DNS Server Address 1           |192.168.30.1
DNS Server Address 2           |None
Domain Name                    |
Save NAT and DHCP Operation Log|Yes
Static Routing Table to Push   |
The command completed successfully.

Изменим текущие настройки под новую 192.168.100.0/24 подсеть (DhcpSet).

VPN Server/VPN_1>DhcpSet 
DhcpSet command - Change Virtual DHCP Server Function Setting of SecureNAT Function
Start Point for Distributed Address Band: 192.168.100.10

End Point for Distributed Address Band: 192.168.100.100

Subnet Mask: 255.255.255.0

Lease Limit (Seconds): 7200

Default Gateway ('none' to not set this): 192.168.100.1

DNS Server 1 ('none' to not set this): 192.186.100.1

DNS Server 2 ('none' to not set this): 8.8.8.8

Domain Name: myvpn

Save Log (yes / no): no

The command completed successfully.

Я задал диапазон выдаваемых адресов с 192.168.100.10 по 192.168.100.100, маску подсети, шлюз и DNS-сервера. Lease Limit (срок аренды) оставил по умолчанию.

Новые настройки DHCP теперь выглядят так.

VPN Server/VPN_1>DhcpGet
DhcpGet command - Get Virtual DHCP Server Function Setting of SecureNAT Function
Item                           |Value
-------------------------------+---------------
Use Virtual DHCP Function      |Yes
Start Distribution Address Band|192.168.100.10
End Distribution Address Band  |192.168.100.100
Subnet Mask                    |255.255.255.0
Lease Limit (Seconds)          |7200
Default Gateway Address        |192.168.100.1
DNS Server Address 1           |192.186.100.1
DNS Server Address 2           |8.8.8.8
Domain Name                    |myvpn
Save NAT and DHCP Operation Log|No
Static Routing Table to Push   |
The command completed successfully.

Если сейчас подключиться к VPN, открыть командную строку Windows и выполнить команду ipconfig, то можно увидеть следующую картину.

Компьютер теперь имеет адрес 192.168.100.10, шлюзом выступает 192.168.100.1, сеть называется "myvpn". Как и было задано при настройке.

DHCP-сервер можно отключить, команда DhcpDisable.

Если забыть включить DHCP, то адреса клиентам выдаваться не будут, но клиент все равно будет подключен к серверу. При этом трафик будет идти с вашего основного адреса. Невнимательный пользователь будет уверен что скрывает свой IP, но на самом деле это не так. По умолчанию DHCP включен всегда и лучше его не трогать.

Отключение SecureNAT

Для выключения SecureNAT команда SecureNatDisable.

VPN Server/VPN_1>SecureNatDisable
SecureNatDisable command - Disable the Virtual NAT and DHCP Server Function (SecureNat Function)
The command completed successfully.

Отключенный SecureNAT.

VPN Server/VPN_1>SecureNatStatusGet
SecureNatStatusGet command - Get the Operating Status of the Virtual NAT and DHCP Server Function (SecureNat Function)
Item                     |Value
-------------------------+---------
Virtual Hub Name         |VPN_1
NAT TCP/IP Sessions      |0 Session
NAT UDP/IP Sessions      |0 Session
NAT ICMP Sessions        |0 Session
NAT DNS Sessions         |0 Session
Allocated DHCP Clients   |0 Client
Kernel-mode NAT is Active|No
Raw IP mode NAT is Active|No
The command completed successfully.

Local Bridge

Local Bridge полностью отличается от SecureNAT. Этому режиму требуется поддержка TUN/TAP устройств, поэтому его можно использовать не на всех VPS/VDS, а только на имеющих возможность их загрузки. Кроме того, вся настройка Local Bridge, от начала и до конца, делается ручками.

Плюсами Local Bridge являются более высокая скорость, надежность и безопасность.

Local Bridge соединяет хаб с физическим или tap-адаптером. Маршрутизация трафика происходит в ядре системы с помощью netfilter/iptables.

DHCP для Local Bridge

Local Bridge не имеет своего DHCP сервера, поэтому приходится устанавливать еще и DHCP сервера. В CentOS устанавливают dhcp, в Ubuntu/Debian устанавливают isc-dhcp-server.

Установим dhcp для CentOS.

yum install -y dhcp

Установим isc-dhcp-server для Ubuntu/Debian.

apt-get install -y isc-dhcp-server

Отредактируем файл настроек dhcp-сервера, он одинаков везде.

nano /etc/dhcp/dhcpd.conf

Содержимое файла dhcpd.conf.

option domain-name "myvpn";
option domain-name-servers 192.168.30.1;
 
default-lease-time 43200;
max-lease-time 86400;

log-facility local7;
 
subnet 192.168.30.0 netmask 255.255.255.0 {
range 192.168.30.10 192.168.30.200;
option routers 192.168.30.1;
}
 
# Если нужно выдавать клиенту постоянный ip-адрес
# То можно сделать привязку по MAC 
# Раскомментируйте строки, задайте желаемый ip 
# Пропишите MAC-адрес адаптера, который будет создан после установки клиента
 
#host home {
#hardware ethernet XX:XX:XX:XX:XX:XX;
#fixed-address XXX.XXX.XXX.XX;
#}

Если вы прочитали про сетевые настройки SecureNAT, то скорее всего поняли откуда я взял значения для dhcp-сервера, так как подсеть одинакова для обоих режимов.

Исходя из адреса дефолтной подсети (192.168.30.0/24), я задал следующие значения:

  • domain-name - имя сети, может быть любым.
  • domain-name-servers - адреса DNS, можно указать адрес шлюза или прямой адрес предпочитаемого сервера. (192.168.30.1)
  • default-lease-time - срок аренды ip-адреса клиентом, если клиент самостоятельно не указывает срок аренды адреса.
  • max-lease-time - максимальный срок аренды адреса клиентом.
  • subnet - адрес подсети (192.168.30.0)
  • netmask - маска подсети (255.255.255.0)
  • range - диапазон адресов для выдачи (от 192.168.30.10 и до 192.168.30.200)
  • option routers - шлюз (192.168.30.1)

Значения "lease-time" задаются в секундах, я задал 12 и 24 часа соответственно. Если выставить маленькие значения, то по истечению срока соединение будет разрываться, что не есть хорошо при длительной работе.

Сделаем интерфейс tap_vpn шлюзом подсети, назначив ему адрес 192.168.30.1

ifconfig tap_vpn 192.168.30.1

Проверим интерфейс.

ifconfig tap_vpn
tap_vpn: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.30.1  netmask 255.255.255.0  broadcast 192.168.30.255
        inet6 fe80::2ac:4dff:fe2f:c83f  prefixlen 64  scopeid 0x20<link>
        ether 00:ac:4d:2f:c8:3f  txqueuelen 1000  (Ethernet)
        RX packets 35  bytes 3010 (2.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 94  bytes 7764 (7.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Запустим dhcp-сервер.

CentOS
systemctl start dhcpd

Ubuntu/Debian
systemctl start isc-dhcp-server

Проверим как работает в CentOS (systemctl status dhcpd)

systemctl status dhcpd
● dhcpd.service - DHCPv4 Server Daemon
   Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Thu 2018-05-10 22:46:40 MSK; 40s ago
     Docs: man:dhcpd(8)
           man:dhcpd.conf(5)
 Main PID: 2297 (dhcpd)
   Status: "Dispatching packets..."
   CGroup: /system.slice/dhcpd.service
           └─2297 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid

Sep 26 05:14:06 tech dhcpd[2297]: Sending on   LPF/tap_vpn/00:ac:4d:2f:c8:3f/192.168.30.0/24

Проверим как работает в Debian/Ubuntu (systemctl status isc-dhcp-server)

systemctl status isc-dhcp-server
● isc-dhcp-server.service - ISC DHCP IPv4 server
   Loaded: loaded (/lib/systemd/system/isc-dhcp-server.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2018-05-10 22:46:40 MSK; 40s ago
     Docs: man:dhcpd(8)
 Main PID: 2936 (dhcpd)
    Tasks: 1
   Memory: 9.0M
      CPU: 33ms
   CGroup: /system.slice/isc-dhcp-server.service
           └─2936 dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcp-server/dhcpd.pid -cf /etc/dhcp/dhcpd.conf

Автозапуск DHCP при старте vpnserver

Сделаем загрузку DHCP сервера зависящей от загрузки vpnserver. Во первых, чтобы не назначать адрес tap-интерфейса вручную, а, во вторых, чтобы не запускать вручную dhcp-сервер после каждой перезагрузки или включения машины.

Для этого добавим две команды непосредственно в скрипт автозапуска vpnserver.

ifconfig tap_vpn 192.168.30.1
systemctl restart dhcpd или isc-dhcp-server

Отредактируем скрипт /etc/init.d/vpnserver.

nano /etc/init.d/vpnserver

Приводим содержимое скрипта к следующему виду в CentOS.

#!/bin/sh
# chkconfig: 2345 99 01
# description: SoftEther VPN Server
DAEMON=/usr/local/vpnserver/vpnserver
LOCK=/var/lock/subsys/vpnserver
test -x $DAEMON || exit 0
case "$1" in
start)
$DAEMON start
touch $LOCK
sleep 3
ifconfig tap_vpn 192.168.30.1
systemctl restart dhcpd
;;
stop)
$DAEMON stop
rm $LOCK
;;
restart)
$DAEMON stop
sleep 3
$DAEMON start
sleep 3
ifconfig tap_vpn 192.168.30.1
systemctl restart dhcpd
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0

Приводим содержимое скрипта к следующему виду в Ubuntu/Debian.

#!/bin/sh
### BEGIN INIT INFO
# Provides:          vpnserver
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable Softether by daemon.
### END INIT INFO
DAEMON=/usr/local/vpnserver/vpnserver
LOCK=/var/lock/subsys/vpnserver
test -x $DAEMON || exit 0
case "$1" in
start)
$DAEMON start
touch $LOCK
sleep 3
ifconfig tap_vpn 192.168.30.1
systemctl restart isc-dhcp-server
;;
stop)
$DAEMON stop
rm $LOCK
;;
restart)
$DAEMON stop
sleep 3
$DAEMON start
sleep 3
ifconfig tap_vpn 192.168.30.1
systemctl restart isc-dhcp-server
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0

Выполняем systemctl daemon-reload, чтобы принять изменения в скриптах.

systemctl daemon-reload

Перезагружаем vpnserver или систему.

systemctl restart vpnserver
или
reboot

Сразу после загрузки/перезагрузки проверяем интерфейс и dhcp.

ifconfig tap_vpn
tap_vpn: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.30.1  netmask 255.255.255.0  broadcast 192.168.30.255
        inet6 fe80::2ac:4dff:fe2f:c83f  prefixlen 64  scopeid 0x20<link>
        ether 00:ac:4d:2f:c8:3f  txqueuelen 1000  (Ethernet)
        RX packets 12  bytes 1032 (1.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 38  bytes 3132 (3.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


systemctl status isc-dhcp-server
● isc-dhcp-server.service - ISC DHCP IPv4 server
   Loaded: loaded (/lib/systemd/system/isc-dhcp-server.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2018-05-10 23:10:33 MSK; 1min 11s ago
     Docs: man:dhcpd(8)
 Main PID: 1417 (dhcpd)
    Tasks: 1
   Memory: 9.0M
      CPU: 16ms
   CGroup: /system.slice/isc-dhcp-server.service
           └─1417 dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcp-server/dhcpd.pid -cf /etc/dhcp/dhcpd.conf

Форвардинг пакетов и iptables

Включим форвардинг пакетов и добавим правила для маршрутизации трафика.

Форвардинг пакетов.

echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf

sysctl -p

Правила iptables.

# Натируем трафик из подсети 192.168.30.0/24 на основной IP сервера
iptables -t nat -A POSTROUTING -s 192.168.30.0/24 -j SNAT --to-source ВАШ.IP.АД.РЕС

# Разрешаем проходящие пакеты из подсети 192.168.30.0/24
iptables -A FORWARD -s 192.168.30.0/24 -j ACCEPT

# Разрешаем проходящие пакеты для уже установленных соединений
iptables -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

Если все сделано правильно, можно подключаться и начинать пользоваться собственным VPN. Установка и настройка на этом завершены.

Ответить:

Please enter your comment!
Please enter your name here