SoftEther VPN Server (аналог openvpn) установка и настройка

Thank you for reading this post, don't forget to subscribe!

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

Дан­ные могут пере­да­вать­ся не толь­ко с помо­щью 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.

  • 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.

Для созда­ния 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, это зна­чит что все в поряд­ке и мост готов к работе.

После того как 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.

[codesyntax lang="php"]

[/codesyntax]

 

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

  • 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.

[codesyntax lang="php"]

[/codesyntax]

 

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

  • 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 не тре­бо­ва­те­лен к типу вир­ту­а­ли­за­ции 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Отключение SecureNAT

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

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

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.

[codesyntax lang="php"]

[/codesyntax]

Если вы про­чи­та­ли про сете­вые настрой­ки 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

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

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

  • CentOS
  • systemctl start dhcpd
  • Ubuntu/Debian
  • systemctl start isc-dhcp-server

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

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

Автозапуск 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.

[codesyntax lang="php"]

[/codesyntax]

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

[codesyntax lang="php"]

[/codesyntax]

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

  • systemctl daemon-reload

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

  • systemctl restart vpnserver
  • или
  • reboot

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

Форвардинг пакетов и 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. Уста­нов­ка и настрой­ка на этом завершены.