После установки нового сервера, подключаемся по SSH и обновляем список пакетов

pkg update

Устанавливаем пакет mpd5

pkg install mpd5

Добавляем mpd5 в автозапуск

echo 'mpd_enable="YES"' >> /etc/rc.conf

Добавляем конфигурационный файл /usr/local/etc/mpd5/mpd.conf

startup:

default:
    load l2tp_server

l2tp_server:
# 
# Define dynamic IP address pool.
    set ippool add pool1 10.10.2.20 10.10.2.254

# Create clonable bundle template named B
    create bundle template B
    set iface enable proxy-arp
    set iface idle 1800
    set iface enable tcpmssfix
    set iface route 10.10.2.1
    set iface up-script /usr/local/etc/mpd5/l2tp_server_up.py
    set iface down-script /usr/local/etc/mpd5/l2tp_server_down.py
    set ipcp yes vjcomp
# Specify IP address pool for dynamic assigment.
    set ipcp ranges 10.10.2.1/24 ippool pool1
    set ipcp dns 10.10.2.1
# The five lines below enable Microsoft Point-to-Point encryption
# (MPPE) using the ng_mppc(8) netgraph node type.
    set bundle enable compression
    set ccp yes mppc
    set mppc yes e40
    set mppc yes e128
    set mppc yes stateless
# Create clonable link template named L
    create link template L l2tp
# Set bundle template to use
    set link action bundle B
# Multilink adds some overhead, but gives full 1500 MTU.
    set link enable multilink
    set link yes acfcomp protocomp
    set link no pap chap
    set link enable chap
    set link enable chap-msv1
    set link enable chap-msv2
    set link keep-alive 10 60
# We reducing link mtu to avoid GRE packet fragmentation
    set link mtu 1460
# Configure l2tp
# IP
    set l2tp self 0.0.0.0
# Allow to accept calls
    set link enable incoming

Добавляем тестового пользователя в файл /usr/local/etc/mpd5/mpd.secret

user password

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

Устанавливаем интерпретатор Python 3.6 для работы скриптов. Это необязательный шаг, но работать через Python удобнее

pkg install python36

Добавить скрипты

Скрипт, выполняемый при подключении к серверу клиента: /usr/local/etc/mpd5/l2tp_server_up.py

#!/usr/bin/env python3.6
# -*- coding: UTF-8 -*-

__author__ = 'RemiZOffAlex'
__copyright__ = '(c) RemiZOffAlex'
__license__ = 'MIT'
__email__ = 'remizoffalex@mail.ru'
__url__ = 'http://remizoffalex.ru'

import sys
import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.FileHandler(
    '/var/log/vpn-users.log',
    encoding = "UTF-8"
)
formatter = logging.Formatter('[%(asctime)s] %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)

logger.info(
    'Пользователь [{}] подключился и получил IP: {}'.format(
        sys.argv[5], sys.argv[4]
    )
)

Скрипт, выполняемый при отключении от сервера клиента: /usr/local/etc/mpd5/l2tp_server_down.py

#!/usr/bin/env python3.6
# -*- coding: UTF-8 -*-

__author__ = 'RemiZOffAlex'
__copyright__ = '(c) RemiZOffAlex'
__license__ = 'MIT'
__email__ = 'remizoffalex@mail.ru'
__url__ = 'http://remizoffalex.ru'

import sys
import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.FileHandler(
    '/var/log/vpn-users.log',
    encoding = "UTF-8"
)
formatter = logging.Formatter('[%(asctime)s] %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)

logger.info(
    'Пользователь [{}] отключился'.format(
        sys.argv[5]
    )
)

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

chmod +x /usr/local/etc/mpd5/l2tp_server_up.py /usr/local/etc/mpd5/l2tp_server_down.py

Правила межсетевого экрана в файле /etc/firewall.sh

#!/bin/sh

fwcmd="/sbin/ipfw"

${fwcmd} -f flush

${fwcmd} add allow ip from any to any via lo0
${fwcmd} add deny ip from any to 127.0.0.0/8
${fwcmd} add deny ip from 127.0.0.0/8 to any
${fwcmd} add deny ip from any to ::1
${fwcmd} add deny ip from ::1 to any
${fwcmd} add allow ipv6-icmp from :: to ff02::/16
${fwcmd} add allow ipv6-icmp from fe80::/10 to fe80::/10
${fwcmd} add allow ipv6-icmp from fe80::/10 to ff02::/16
${fwcmd} add allow ipv6-icmp from any to any ip6 icmp6types 1
${fwcmd} add allow ipv6-icmp from any to any ip6 icmp6types 2,135,136

${fwcmd} nat 1 config ip XXX.XXX.XXX.XXX
${fwcmd} add nat 1 ip from 10.10.2.1/24 to any out via vtnet0
${fwcmd} add nat 1 ip from any to XXX.XXX.XXX.XXX in via vtnet0

${fwcmd} add allow ip from any to any
${fwcmd} add deny ip from any to any

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

chmod +x /etc/firewall.sh

Автозапуск межсетевого экрана

echo 'firewall_enable="YES"' >> /etc/rc.conf
echo 'firewall_script="/etc/firewall.sh"' >> /etc/rc.conf

Включить прохождение пакетов через шлюз при следующей загрузке

echo 'gateway_enable="YES"' >> /etc/rc.conf

Включить межсетевой экран и NAT после перезагрузки

cat << EOF > /boot/loader.conf
ipfw_load="YES"
ipfw_nat_load="YES"
EOF

Перезагружаем VPS

Отмечено:

Добавить комментарий