Заметки системного администратора

Настройка хоста

На хосте прописываем загрузку необходимых модулей. Для этого в /etc/modules добавляем следующие строки::

sudo nano /etc/modules

tun
ppp-compress-18
ppp_mppe
ppp_deflate
ppp_async
pppoatm
ppp_generic
ip_gre
nf_nat_pptp

Также нужно на хосте разрешить форвардинг пакетов. Для этого в файе /etc/sysctl.conf раскомментируем строку:

sudo nano /etc/sysctl.conf

net.ipv4.ip_forward=1

После этого применяем изменения:

sudo sysctl -p

Если ваш PPTP VPN находится за NAT, то в правилах фаервола нужно настроить проброс протокола GRE и PPTP портов: 47 UDP и 1723 TCP на ip адрес LXC контейнера.
С помощью iptables + ferm это можно сделать следующим образом:

В конфигурационный файл ferm добавляем:

sudo nano /etc/ferm/ferm.conf

#REAL IP
@def $myip = (XXX.XXX.XXX.XXX/32);

#LXC PPTP IP
@def $pptpip = (XXX.XXX.XXX.XXX/32);

@def &FORWARD($proto, $dstaddr, $port, $dest, $dport) = {
table filter chain FORWARD daddr $dest proto $proto dport $port ACCEPT;
table nat chain PREROUTING daddr $dstaddr proto $proto dport $port DNAT to "$dest:$dport";
}
@def &FORWARD_PROT($proto, $dstaddr, $dest) = {
table filter chain FORWARD daddr $dest proto $proto ACCEPT;
table nat chain PREROUTING daddr $dstaddr proto $proto DNAT to "$dest";
}
#PPTP redirect
&FORWARD(tcp, $myip,1723, $pptpip,1723);
&FORWARD(udp, $myip,47, $pptpip,47);
&FORWARD_PROT(gre, $myip, $pptpip);


Перезапустим ferm для применения правил iptables:

sudo service ferm reload

Добавляем устройство в контейнер LXC

В конфигурации контейнера /var/lib/lxc/[container_name]/config прописываем разрешения на работу с устройством /dev/ppp.
Сначала на хосте смотрим параметры этого устройства:

sudo ls -ls /dev/ppp

Вывод:
0 crw------- 1 root root 108, 0 Jun 8 21:19 /dev/ppp

Отсюда берем значения 108 и 0 и прописываем их в /var/lib/lxc/[container_name]/config:

sudo nano /var/lib/lxc/[container_name]/config

lxc.cgroup.devices.allow = c 108:0 rwm

Настройка контейнера

Устанавливаем необходимые компоненты:

apt-get install wget nano iptables

Создаем файл /etc/rc.local:

nano /etc/rc.local

Содержимое:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
exit 0

Создаем файл /etc/systemd/system/rc-local.service:

nano /etc/systemd/system/rc-local.service

Содержимое:

[Unit]
 Description=/etc/rc.local Compatibility
 ConditionPathExists=/etc/rc.local
[Service]
 Type=forking
 ExecStart=/etc/rc.local start
 TimeoutSec=0
 StandardOutput=tty
 RemainAfterExit=yes
 SysVStartPriority=99
[Install]
 WantedBy=multi-user.target

Создаем файл /etc/rc.local и делаем его исполняемым:

touch /etc/rc.local
chmod +x /etc/rc.local

Включаем сервис rc-local:

systemctl enable rc-local

Запускаем сервис rc-local:

systemctl start rc-local.service

Проверяем статус сервиса, запущен или нет:

systemctl status rc-local.service

Прописываем в /etc/rc.local следующее:

nano /etc/rc.local

 mknod /dev/ppp c 108 0
 chmod 0666 /dev/ppp
 service pptpd restart

Скачиваем скрипт для быстрой настройки PPTP сервера:

wget https://ruii.ru/scripts/pptp.sh

Отвечаем на вопросы скрипта, перезагружаем контейнер и проверяем.


Включаем debug
В файлик /etc/ppp/options нужно добавить

nano /etc/ppp/options

debug

А затем перезапустить rsyslogd и pptpd:

service rsyslog restart
service pptpd restart