Поднимаем мультипротокольный VPN SoftEther на Ubuntu 22.04

Ubuntu 28-03-2023, 13:18 sobir 33 709 9


SoftEther VPN — это бесплатное, кроссплатформенное, многопротокольное программное обеспечение VPN-клиента и VPN-сервера с открытым исходным кодом.

Установку SoftEther VPN мы будем выполнять из исходников на базе ОС Ubuntu 22.04. Рассмотрим процесс компиляции и установки программного обеспечения в командной строке Linux.

1. Устанавливаем необходимые пакеты:
apt update
apt install gcc make wget -y

2. Скачиваем архив SoftEther VPN Server с оф. сайта (версия 4.38-9760 на момент написания статьи)
wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.38-9760-rtm/softether-vpnserver-v4.38-9760-rtm-2021.08.17-linux-x64-64bit.tar.gz

3. Разархивируем файлы и запустим процесс компиляции и установки:
tar -xvzf softether-vpnserver-v4.38-9760-rtm-2021.08.17-linux-x64-64bit.tar.gz -C /opt/
cd /opt/vpnserver/
make

4. Запускаем SoftEther VPN Server:
/opt/vpnserver/vpnserver start

5. Назначаем пароль для администратора:
/opt/vpnserver/vpncmd

Выбираем 1 - настройку VPN сервера
1. Management of VPN Server or VPN Bridge

На следующие два вопроса просто нажимаем ENTER
Hostname of IP Address of Destination:
Specify Virtual Hub Name:

После мы окажемся в командной оболочке SoftEther. Вводим команду:
VPN Server> ServerPasswordSet

6. Создадим виртуальный TAP интерфейс:
TAP эмулирует Ethernet устройство и работает на канальном уровне модели OSI, оперируя кадрами Ethernet. TUN (сетевой туннель) работает на сетевом уровне модели OSI, оперируя IP пакетами. TAP используется для создания сетевого моста, тогда как TUN для маршрутизации. SoftEther в режиме SecureNAT может пригодиться, когда нет возможности создать TAP/TUN интерфейс.

VPN Server> BridgeDeviceList
VPN Server> BridgeCreate DEFAULT /DEVICE:soft /TAP:yes
VPN Server> BridgeList

7. Проверяем статус интерфейса в системе:
ip addr или ifconfig

8. Создадим сервис для автозапуска SoftEther VPN Server с присвоением IP-адреса интерфейсу tap_soft:
vi /etc/systemd/system/vpnserver.service
[Unit]
Description=SoftEther VPN Server
After=network.target

[Service]
Type=forking
ExecStart=/opt/vpnserver/vpnserver start
ExecStartPost=/bin/sleep 3s
ExecStartPost=/sbin/ifconfig tap_soft 192.168.249.1/24
#ExecStartPost=/sbin/ip address add 192.168.249.1/24 dev tap_soft
ExecStop=/opt/vpnserver/vpnserver stop
#ExecReload=/bin/kill -HUP $MAINPID
#Restart=on-failure

[Install]
WantedBy=multi-user.target

Перечитываем конфигурацию systemd:
systemctl daemon-reload

Разрешаем автозапуск и стартуем vpnserver:
systemctl enable --now vpnserver

Проверяем статус службы:
systemctl status vpnserver

9. В качестве DHCP-сервера установим сервис Dnsmasq. Для начала остановим службу systemd-resolved:
systemctl disable --now systemd-resolved
rm -f /etc/resolv.conf
echo 'nameserver 1.1.1.1' > /etc/resolv.conf
echo 'nameserver 8.8.8.8' >> /etc/resolv.conf
apt install dnsmasq -y

10. Выполним бэкап конфига Dnsmasq:
mv /etc/dnsmasq.conf /etc/dnsmasq.conf.bak

11. Приводим конфиг к следующему виду:
vi /etc/dnsmasq.conf
interface=tap_soft
dhcp-range=tap_soft,192.168.249.10,192.168.249.200,12h
dhcp-option=3
dhcp-option=tap_soft,6,1.1.1.1,8.8.8.8
dhcp-option=121,192.168.0.0/16,192.168.249.1,172.16.0.0/12,192.168.249.1,10.0.0.0/8,192.168.249.1

12. Перезапускаем службу dnsmasq:
systemctl restart dnsmasq

13. Разрешаем пересылку пакетов между интерфейсами:
sysctl net.ipv4.ip_forward=1
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf

14. Настроим трансляцию трафика на основе источника:
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.249.0/24 -j MASQUERADE
apt install iptables-persistent -y
iptables-save > /etc/iptables/rules.v4
Похожие новости
How to install Prometheus node exporter on Linux host

Install Prometheus node exporter on Linux host....

Подробнее
Разворачиваем NGINX в Docker

Создание кастомного образа nginx из Dockerfile....

Подробнее
Поднимаем SSL VPN OpenConnect с Let's Encrypt в Ubuntu 20.04

Поднимаем сервер SSL VPN OpenConnect для удаленного доступа пользователям....

Подробнее
Дамп трафика с использованием ETW, Wireshark и tcpdump

Анализируем трафик с использованием стандартных утилит в Windows и Linux....

Подробнее
How to install Docker and Compose on AlmaLinux

Quick setup docker and docker-compose with a simple bash script....

Подробнее
Получаем валидные сертификаты SSL от Let's Encrypt для NGINX

Получаем валидные сертификаты SSL от Let's Encrypt для NGINX с использованием плагина webroot....

Подробнее
Комментарии (9)
  1. FidoNet
    FidoNet 28 сентября 2024 05:10

    Спасибо за статью. Остальные статьи что находил либо старые, либо неполные. Всё вышло только при подключении нет Интернета на устройстве. Комманду iptables давал, сетевой интерфейс смотрящий в сеть - eth0, фовардинг пакетов делал. Пробовал и iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE, всё равно Интернета нет, куда ещё нужно посмотреть?

  2. sobir
    sobir 13 октября 2024 13:22
    Цитата: FidoNet

    Спасибо за статью. Остальные статьи что находил либо старые, либо неполные. Всё вышло только при подключении нет Интернета на устройстве. Комманду iptables давал, сетевой интерфейс смотрящий в сеть - eth0, фовардинг пакетов делал. Пробовал и iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE, всё равно Интернета нет, куда ещё нужно посмотреть?

    Попробуйте проверить правила фильтрации трафика в таблице filter, цепочке forward, может у вас фаервол блочит. Также проверьте доступность виртуального tap интерфейса с помощью команды ping.

  3. FidoNet
    FidoNet 19 октября 2024 17:48
    Цитата: sobir
    Цитата: FidoNet

    Спасибо за статью. Остальные статьи что находил либо старые, либо неполные. Всё вышло только при подключении нет Интернета на устройстве. Комманду iptables давал, сетевой интерфейс смотрящий в сеть - eth0, фовардинг пакетов делал. Пробовал и iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE, всё равно Интернета нет, куда ещё нужно посмотреть?

    Попробуйте проверить правила фильтрации трафика в таблице filter, цепочке forward, может у вас фаервол блочит. Также проверьте доступность виртуального tap интерфейса с помощью команды ping.

     

    Так и не получилось, работает только через SecureNat.

    В момент подключения, DHCP сервер выдаёт вот так


    DHCPDISCOVER(tap_soft) ca:47:e0:27:80:6e
    DHCPOFFER(tap_soft) 192.168.249.29 ca:47:e0:27:80:6e
    DHCPDISCOVER(tap_soft) ca:47:e0:27:80:6e
    DHCPOFFER(tap_soft) 192.168.249.29 ca:47:e0:27:80:6e
    DHCPDISCOVER(tap_soft) ca:47:e0:27:80:6e
    DHCPOFFER(tap_soft) 192.168.249.29 ca:47:e0:27:80:6e
    DHCPREQUEST(tap_soft) 192.168.249.29 ca:47:e0:27:80:6e
    DHCPACK(tap_soft) 192.168.249.29 ca:47:e0:27:80:6e Keenetic-9964

    Происходит L2TP коннект и клиент получает адресс 192.168.249.29

     

    В правилах вот так
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A INPUT -p tcp -m tcp --dport 1701 -j ACCEPT
    -A INPUT -p udp -m udp --dport 1701 -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 4500 -j ACCEPT
    -A INPUT -p udp -m udp --dport 4500 -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 500 -j ACCEPT
    -A INPUT -p udp -m udp --dport 500 -j ACCEPT
    -A OUTPUT ! -s 127.241.173.119/32 ! -d 127.3.125.203/32 -p icmp -m icmp --icmp-type 3/3 -m connmark ! --mark 0x59cb7b68 -j DROP
    -A OUTPUT ! -s 127.207.242.177/32 ! -d 127.14.110.5/32 -p tcp -m tcp --sport 61001:65535 --tcp-flags RST RST -m connmark ! --mark 0x6830be11 -j DROP
    COMMIT
    #
    *nat
    :PREROUTING ACCEPT [621:144631]
    :INPUT ACCEPT [538:139101]
    :OUTPUT ACCEPT [850:176144]
    :POSTROUTING ACCEPT [56:4833]
    -A POSTROUTING -s 192.168.249.0/24 -o ens3 -j MASQUERADE
    -A POSTROUTING -o ens3 -j MASQUERADE
    -A POSTROUTING -s 192.168.249.0/24 -o ens3 -j MASQUERADE
    COMMIT

     

    Интерфейс смотрящий наружу - ens3
    Интерфейс SE:
    tap_soft: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    inet 192.168.249.1 netmask 255.255.255.0 broadcast 192.168.249.255
    inet6 fe80::5c78:b2ff:fec6:c937 prefixlen 64 scopeid 0x20<link>
    ether 06:63:1d:a5:71:39 txqueuelen 1000 (Ethernet)

  4. FidoNet
    FidoNet 20 октября 2024 12:12

    Можт быть дело в dnsmasq.service? Ошибка Failed to set DNS configuration: Unit dbus-org.freedesktop.network1.service not found.

  5. sobir
    sobir 25 октября 2024 16:48
    Цитата: FidoNet
    Цитата: sobir
    Цитата: FidoNet

    Спасибо за статью. Остальные статьи что находил либо старые, либо неполные. Всё вышло только при подключении нет Интернета на устройстве. Комманду iptables давал, сетевой интерфейс смотрящий в сеть - eth0, фовардинг пакетов делал. Пробовал и iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE, всё равно Интернета нет, куда ещё нужно посмотреть?

    Попробуйте проверить правила фильтрации трафика в таблице filter, цепочке forward, может у вас фаервол блочит. Также проверьте доступность виртуального tap интерфейса с помощью команды ping.

     

    Так и не получилось, работает только через SecureNat.

    В момент подключения, DHCP сервер выдаёт вот так


    DHCPDISCOVER(tap_soft) ca:47:e0:27:80:6e
    DHCPOFFER(tap_soft) 192.168.249.29 ca:47:e0:27:80:6e
    DHCPDISCOVER(tap_soft) ca:47:e0:27:80:6e
    DHCPOFFER(tap_soft) 192.168.249.29 ca:47:e0:27:80:6e
    DHCPDISCOVER(tap_soft) ca:47:e0:27:80:6e
    DHCPOFFER(tap_soft) 192.168.249.29 ca:47:e0:27:80:6e
    DHCPREQUEST(tap_soft) 192.168.249.29 ca:47:e0:27:80:6e
    DHCPACK(tap_soft) 192.168.249.29 ca:47:e0:27:80:6e Keenetic-9964

    Происходит L2TP коннект и клиент получает адресс 192.168.249.29

     

    В правилах вот так
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A INPUT -p tcp -m tcp --dport 1701 -j ACCEPT
    -A INPUT -p udp -m udp --dport 1701 -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 4500 -j ACCEPT
    -A INPUT -p udp -m udp --dport 4500 -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 500 -j ACCEPT
    -A INPUT -p udp -m udp --dport 500 -j ACCEPT
    -A OUTPUT ! -s 127.241.173.119/32 ! -d 127.3.125.203/32 -p icmp -m icmp --icmp-type 3/3 -m connmark ! --mark 0x59cb7b68 -j DROP
    -A OUTPUT ! -s 127.207.242.177/32 ! -d 127.14.110.5/32 -p tcp -m tcp --sport 61001:65535 --tcp-flags RST RST -m connmark ! --mark 0x6830be11 -j DROP
    COMMIT
    #
    *nat
    :PREROUTING ACCEPT [621:144631]
    :INPUT ACCEPT [538:139101]
    :OUTPUT ACCEPT [850:176144]
    :POSTROUTING ACCEPT [56:4833]
    -A POSTROUTING -s 192.168.249.0/24 -o ens3 -j MASQUERADE
    -A POSTROUTING -o ens3 -j MASQUERADE
    -A POSTROUTING -s 192.168.249.0/24 -o ens3 -j MASQUERADE
    COMMIT

     

    Интерфейс смотрящий наружу - ens3
    Интерфейс SE:
    tap_soft: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    inet 192.168.249.1 netmask 255.255.255.0 broadcast 192.168.249.255
    inet6 fe80::5c78:b2ff:fec6:c937 prefixlen 64 scopeid 0x20<link>
    ether 06:63:1d:a5:71:39 txqueuelen 1000 (Ethernet)

    SecureNAT должен быть выключен, если вы настраиваете Local Bridge. 



    Цитата: FidoNet

    Можт быть дело в dnsmasq.service? Ошибка Failed to set DNS configuration: Unit dbus-org.freedesktop.network1.service not found.

    Попробуйте проверить службу systemd-resolved, которая включена по умолчанию в дистрибутиве Ubuntu. Она должна быть выключена командой:

    systemctl disable --now systemd-resolved.

     

    P.S.

    Проверил статью на свежоустановленной Ubuntu 20.04. Завелось без проблем. 

  6. FidoNet
    FidoNet 25 октября 2024 22:04
    Цитата: sobir
    Цитата: FidoNet

    Можт быть дело в dnsmasq.service? Ошибка Failed to set DNS configuration: Unit dbus-org.freedesktop.network1.service not found.

    Попробуйте проверить службу systemd-resolved, которая включена по умолчанию в дистрибутиве Ubuntu. Она должна быть выключена командой:

    systemctl disable --now systemd-resolved.

     

    P.S.

    Проверил статью на свежоустановленной Ubuntu 20.04. Завелось без проблем. 

     

    Спасибо, попробую ещё раз. Как я понимаю, если постоянный внешний IP на VPS то лучше использовать не MASQUERADE, а SNAT?

  7. sobir
    sobir 27 октября 2024 19:02
    Цитата: FidoNet
    Цитата: sobir
    Цитата: FidoNet

    Можт быть дело в dnsmasq.service? Ошибка Failed to set DNS configuration: Unit dbus-org.freedesktop.network1.service not found.

    Попробуйте проверить службу systemd-resolved, которая включена по умолчанию в дистрибутиве Ubuntu. Она должна быть выключена командой:

    systemctl disable --now systemd-resolved.

     

    P.S.

    Проверил статью на свежоустановленной Ubuntu 20.04. Завелось без проблем. 

     

    Спасибо, попробую ещё раз. Как я понимаю, если постоянный внешний IP на VPS то лучше использовать не MASQUERADE, а SNAT?

    Да, если у вас один внешний IP адрес, то лучше использовать SNAT вместо MASQUERADE. Тем самым оптимизируете работу фаервола.

  8. FidoNet
    FidoNet 7 ноября 2024 03:26
    Цитата: sobir
    Цитата: FidoNet

    Спасибо за статью. Остальные статьи что находил либо старые, либо неполные. Всё вышло только при подключении нет Интернета на устройстве. Комманду iptables давал, сетевой интерфейс смотрящий в сеть - eth0, фовардинг пакетов делал. Пробовал и iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE, всё равно Интернета нет, куда ещё нужно посмотреть?

    Попробуйте проверить правила фильтрации трафика в таблице filter, цепочке forward, может у вас фаервол блочит. Также проверьте доступность виртуального tap интерфейса с помощью команды ping.

    Проблема была в том что клиенту не выдавался шлюз, в конфиге DHCP требовалось добавить шлюз

    dhcp-option=3, 192.168.249.1

  9. sobir
    sobir 8 ноября 2024 12:42
    Цитата: FidoNet
    Цитата: sobir
    Цитата: FidoNet

    Спасибо за статью. Остальные статьи что находил либо старые, либо неполные. Всё вышло только при подключении нет Интернета на устройстве. Комманду iptables давал, сетевой интерфейс смотрящий в сеть - eth0, фовардинг пакетов делал. Пробовал и iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE, всё равно Интернета нет, куда ещё нужно посмотреть?

    Попробуйте проверить правила фильтрации трафика в таблице filter, цепочке forward, может у вас фаервол блочит. Также проверьте доступность виртуального tap интерфейса с помощью команды ping.

    Проблема была в том что клиенту не выдавался шлюз, в конфиге DHCP требовалось добавить шлюз

    dhcp-option=3, 192.168.249.1

    Спасибо за комментарий. Прикладываю конфиг со своего рабочего сервера:

     

    interface=tap_soft,tap_soft2
    dhcp-range=tap_soft,192.168.181.10,192.168.181.200,12h
    dhcp-range=tap_soft2,192.168.182.10,192.168.182.200,12h
    dhcp-option=3
    dhcp-option=tap_soft,6,1.1.1.1,8.8.8.8
    dhcp-option=tap_soft2,6,1.1.1.1,8.8.8.8
    dhcp-option=tap_soft,121,10.0.0.0/8,192.168.181.1,172.16.0.0/12,192.168.181.1,1
    92.168.0.0/16,192.168.181.1
    dhcp-option=tap_soft2,121,0.0.0.0/0,192.168.182.1

     

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

Новые комментарии
sobir8 ноября 2024 12:42

Цитата: FidoNet Цитата: sobir Цитата: FidoNet Спасибо за статью. Остальные

img
К комментарию
FidoNet7 ноября 2024 03:26

Цитата: sobir Цитата: FidoNet Спасибо за статью. Остальные статьи что находил

img
К комментарию
sobir27 октября 2024 19:02

Цитата: FidoNet Цитата: sobir Цитата: FidoNet Можт быть дело в

img
К комментарию
FidoNet25 октября 2024 22:04

Цитата: sobir Цитата: FidoNet Можт быть дело в dnsmasq.service? Ошибка Failed

img
К комментарию
sobir25 октября 2024 16:48

Цитата: FidoNet Цитата: sobir Цитата: FidoNet Спасибо за статью. Остальные

img
К комментарию
FidoNet20 октября 2024 12:12

Можт быть дело в dnsmasq.service? Ошибка Failed to set DNS configuration: Unit

img
К комментарию
Все комментарии
Какой дистрибутив Linux вы часто используете?
Календарь
«    Ноябрь 2024    »
ПнВтСрЧтПтСбВс
 123
45678910
11121314151617
18192021222324
252627282930 
Подпишись на канал