SoftEther — установка из PPA-репозитория в Ubuntu 18.04

В одной из прошлых статей я уже описывал установку SoftEther VPN Server из исходников, а также рассказывал что он из себя представляет и как работает.

Сегодня речь пойдет о установке SoftEther VPN из ppa-репозитория на операционную систему Ubuntu 18.04.

Установка SoftEther

По умолчанию Softether не присутствует в репозиториях Ubuntu. Поэтому сначала необходимо добавить репозиторий в систему.

add-apt-repository ppa:paskal-07/softethervpn

Если после добавления репозитория выполнить поиск пакетов Softether, то можно увидеть следующий результат.

apt-cache search softether

softether-vpnbridge - VPN Bridge daemon
softether-vpnclient - VPN Client daemon
softether-vpncmd - Command line utils
softether-vpnserver - VPN Server daemon
softether-common - SoftEther VPN is an open-source cross-platform multi-protocol VPN program, created as an academic project in the University of Tsukuba.

На данный момент нас интересует только два пакета: softether-vpnserver и softether-vpncmd. Это сам сервер и набор консольных утилит для управления.

Устанавливаем softether-vpnserver и softether-vpncmd.

apt install -y softether-vpnserver softether-vpncmd

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

systemctl status softether-vpnserver

● softether-vpnserver.service - LSB: SoftEther VPN service
   Loaded: loaded (/etc/init.d/softether-vpnserver; generated)
   Active: active (running) since Mon 2019-06-17 18:10:50 UTC; 1min 9s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 880 ExecStart=/etc/init.d/softether-vpnserver start (code=exited, status=0/SUCCESS)
    Tasks: 33 (limit: 504)
   CGroup: /system.slice/softether-vpnserver.service
           +-1016 /usr/libexec/softether/vpnserver/vpnserver execsvc
           L-1017 /usr/libexec/softether/vpnserver/vpnserver execsvc

Jun 17 18:10:43 home-18 systemd[1]: Starting LSB: SoftEther VPN service...
Jun 17 18:10:50 home-18 softether-vpnserver[880]: Starting SoftEtherVPN Server: vpnserverThe SoftEther VPN Server service has been 
Jun 17 18:10:50 home-18 softether-vpnserver[880]: .
Jun 17 18:10:50 home-18 systemd[1]: Started LSB: SoftEther VPN service.
lines 1-14/14 (END)

Настройка VPN-сервера

Переходим к настройке сервера. Для вызова консоли управления выполняем команду 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)

# Выбираем раздел настройки сервера (Management of VPN Server or VPN Bridge) вводим 1 и нажимаем Enter
Select 1, 2 or 3: 1

# Выбираем настройку локального сервера - вводим localhost и нажимаем Enter
Hostname of IP Address of Destination: localhost

# Вместо имени локального хаба, просто нажимаем Enter
Specify Virtual Hub Name: 

Мы оказались в консоли управления сервером.

You have administrator privileges for the entire VPN Server.

VPN Server>

Задаем пароль администратора сервера. Команда — ServerPasswordSet.

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.

Удаляем дефолтный виртуальный хаб (что это такое читаем здесь). Команда — HubDelete.

hubdelete

# Чтобы удалить хаб нужно ввести его имя — DEFAULT
HubDelete command - Delete Virtual Hub
Name of Virtual Hub to delete: DEFAULT

The command completed successfully.

Создаем свой (новый) виртуальный хаб. Команда — HubCreate.

hubcreate

# Указываем имя хаба (у меня Home_VPN)
HubCreate command - Create New Virtual Hub
Name of Virtual Hub to be created: Home_VPN

# Задаем пароль хаба
Please enter the password. To cancel press the Ctrl+D key.

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


The command completed successfully.

Просмотреть список доступных хабов можно выполнив команду HubList.

hublist

# Кроме списка хабов команда показывает еще и статистику
HubList command - Get List of Virtual Hubs
Item              |Value
------------------+-------------------
Virtual Hub Name  |Home_VPN
Status            |Online
Type              |Standalone
Users             |0
Groups            |0
Sessions          |0
MAC Tables        |0
IP Tables         |0
Num Logins        |0
Last Login        |2019-06-23 18:39:54
Last Communication|2019-06-23 18:39:54
Transfer Bytes    |0
Transfer Packets  |0
The command completed successfully.

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

hub Home_VPN

Hub command - Select Virtual Hub to Manage
The Virtual Hub "Home_VPN" has been selected.
The command completed successfully.

Мы оказались в консоли управления хабом.

VPN Server/Home_VPN>

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

usercreate

# Имя пользователя
UserCreate command - Create User 
User Name: Denni

# Группа (сначала нужно создать), полное имя, описание - по желанию
# Можно пропустить нажав Enter
Assigned Group Name: 

User Full Name: 

User Description: 

The command completed successfully.

Задаем пароль пользователя. Команда — UserPasswordSet.

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.

Создаем локальный мост (Что это такое читаем здесь). Команда — BridgeCreate. Синтаксис команды выглядит следующим образом.

bridgecreate Home_VPN -device:home_vpn -tap:yes

Home_VPN - имя хаба
-device:home_vpn - имя для tap-устройства (указать свое после двоеточия)
-tap:yes - активировать tap-устройство

Успешное выполнение команды выглядит так.

VPN Server/Home_VPN>bridgecreate Home_VPN -device:home_vpn -tap:yes

BridgeCreate command - Create Local Bridge Connection
While in the condition that occurs immediately after a new bridge connection is made when bridging to a physical network adapter, depending on the type of network adapter, there are cases where it will not be possible to communicate using TCP/IP to the network adapter using a bridge connection from a computer on the virtual network. 
(This phenomenon is known to occur for Intel and Broadcom network adapters.) 

If this issue arises, remedy the situation by restarting the computer on which VPN Server / Bridge is running. Normal communication will be possible after the computer has restarted. 

Also many wireless network adapters will not respond to the sending of packets in promiscuous mode and when this occurs you will be unable to use the Local Bridge. If this issue arises, try using a regular wired network adapter instead of the wireless network adapter.

Instructions for Local Bridge on VM
It has been detected that the VPN Server might be running on a VM (Virtual Machine) suchlike VMware or Hyper-V. Read the following instructions carefully. If you are not using a VM, please ignore this message.
Some VMs prohibit the "Promiscuous Mode" (MAC Address Spoofing) on the network adapters by default.

If the Promiscuous Mode (MAC Address Spoofing) is administratively disabled, the Local Bridge function between a Virtual Hub on the VPN Server and a physical network adapter on the physical computer does not work well. You should allow the Promiscuous Mode (MAC Address Spoofing) by using the configuration tool of the VM.

For details please refer the documents of your VM. If it is a shared-VM and administrated by other person, please request the administrator to permit the use of the Promiscuous (MAC Address Spoofing) Mode to your VM.

The command completed successfully.

Просмотреть локальные мосты можно командой — Bridgelist.

bridgelist

BridgeList command - Get List of Local Bridge Connection
Number|Virtual Hub Name|Network Adapter or Tap Device Name|Status
------+----------------+----------------------------------+---------
1     |Home_VPN        |home_vpn                          |Operating
The command completed successfully.

После создания локального моста в системе должен появиться интерфейс tap-устройства.

ip a
6: tap_home_vpn: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000
    link/ether 5e:ed:db:91:6d:fb brd ff:ff:ff:ff:ff:ff

Или

ifconfig
tap_home_vpn: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 5e:ed:db:91:6d:fb  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Интерфейсу пока еще не присвоен локальный ip-адрес. Это нормально — его зададим позже.

Установка и настройка DHCP для локального моста

Softether поддерживает два механизма передачи трафика: SecureNAT и Local Bridge. Подробнее можно прочитать здесь. Я использую Local Bridge.

Поскольку Local Bridge не имеет своего DHCP-сервера, то приходится устанавливать сторонний. Например — isc-dhcp-server.

apt install -y isc-dhcp-server

Приведем файл настроек /etc/dhcp/dhcpd.conf к следующему виду.

option domain-name "SoftEther_Home_VPN";
option domain-name-servers 10.0.10.1;
 
default-lease-time 43200;
max-lease-time 86400;
log-facility local7;
 
subnet 10.0.10.0 netmask 255.255.255.0 {
range 10.0.10.10 10.0.10.100;
option routers 10.0.10.1;
}

Запускаем tap-интерфейс, попутно назначая ему адрес и маску подсети — 10.0.10.1/24. Таким образом интерфейс становится шлюзом указанной подсети.

ifconfig tap_home_vpn 10.0.10.1/24

У интерфейса должен появиться назначенный адрес.

ip a
6: tap_home_vpn: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000
    link/ether 5e:ed:db:91:6d:fb brd ff:ff:ff:ff:ff:ff
    inet 10.0.10.1/24 brd 10.0.10.255 scope global tap_home_vpn
       valid_lft forever preferred_lft forever

Или

ifconfig
tap_home_vpn: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.10.1  netmask 255.255.255.0  broadcast 10.0.10.255
        ether 5e:ed:db:91:6d:fb  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Запускаем DHCP-сервер.

systemctl start 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 Sun 2019-06-23 19:52:45 MSK; 1s ago
     Docs: man:dhcpd(8)
 Main PID: 2379 (dhcpd)
    Tasks: 1 (limit: 1109)
   CGroup: /system.slice/isc-dhcp-server.service
           └─2379 dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcp-server/dhcpd.pid -cf /etc/dhcp/dhcpd.conf

Jun 23 19:52:45 anode dhcpd[2379]: Sending on   LPF/tap_home_vpn/5e:ed:db:91:6d:fb/10.0.10.0/24
Jun 23 19:52:45 anode dhcpd[2379]: Sending on   Socket/fallback/fallback-net
Jun 23 19:52:45 anode dhcpd[2379]: Server starting service.

Запуск tap-интерфейса с назначением адреса и запуск DHCP придется повторять вручную после каждого включения или перезагрузки машины. Чтобы этого избежать, нужно добавить выполнение команд в автозапуск. Как я это делаю читаем ниже.


В каталоге /root/scripts/ я создаю скрипт softether-dhcp-start.sh (каталог и имя скрипта могут быть другими, необязательно делать как у меня).

nano /root/scripts/softether-dhcp-start.sh

Добавляю в скрипт следующее содержимое.

#!/bin/bash

# Запуск tap-интерфейса и dhcp-сервера с интервалом в 2-е секунды 
ifconfig tap_home_vpn 10.0.10.1/24
wait 2s
systemctl start isc-dhcp-server

exit

Делаю скрипт исполняемым.

chmod u+x /root/scripts/softether-dhcp-start.sh

Создаю юнит-файл для Systemd с помощью которого буду запускать выполнение скрипта при запуске системы.

nano /lib/systemd/system/softetherdhcpstart.service

Добавляю в юнит-файл следующее содержимое (если ваш скрипт в другом месте, то изменить путь до скрипта на свой).

[Unit]
Description=My Script Service
After=multi-user.target

[Service]
Type=idle
ExecStart=/root/scripts/softether-dhcp-start.sh

[Install]
WantedBy=multi-user.target

Выставляю права на файл softetherdhcpstart.service.

chmod 644 /lib/systemd/system/softetherdhcpstart.service

Обновляю конфигурацию и добавляю файл в автозагрузку.

systemctl daemon-reload
systemctl enable softetherdhcpstart.service

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

Настройка фаервола

Включаем форвардинг пакетов в ядре. Добавляем в /etc/sysctl.conf строку net.ipv4.ip_forward = 1 и применяем изменения.

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

sysctl -p

Добавляем правила iptables для маршрутизации трафика.

# Разрешаем обращения на 443 порт (по умолчанию softether слушает на нем)
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

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

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

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

На этом все. Если возникнут вопросы задавайте в комментариях.

Ответить:

Please enter your comment!
Please enter your name here