На хосте Ubuntu 16.04 с LXC развернут контейнер c Ubuntu 16.04.
Настройка хоста
На хосте прописываем загрузку модулей в /etc/modules:
tun ppp-compress-18 ppp_mppe ppp_deflate ppp_async pppoatm ppp_generic ip_gre
Также нужно на хосте разрешить форвардинг пакетов в iptables. Для этого раскомментируем в файлике /etc/sysctl.conf строку:
net.ipv4.ip_forward=1
и применим изменения:
sudo sysctl -p
Добавляем устройство в контейнер LXC
Это акутально для старых версий lxc - Ubuntu 16.04 и более старых.
В более новых - LXC\LXD. О них ниже.
В конфигурации контейнера /var/lib/lxc/[container_name]/config прописываем разрешения на работу с устройством /dev/ppp.
Сначала на хосте смотрим параметры этого устройства:
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:
lxc.cgroup.devices.allow = c 108:0 rwm
Настройка контейнера
Устанавливаем то что нужно:
sudo apt-get install wget nano iptables
Заходим в контейнер и прописываем в /etc/rc.local следующее:
iptables -t nat -A POSTROUTING -j SNAT --to `ifconfig eth0 | grep 'inet addr' | awk {'print $2'} | sed s/.*://` mknod /dev/ppp c 108 0 chmod 0666 /dev/ppp service pptpd restart
Скачиваем скрипт для быстрой настройки PopTop:
wget https://raw.github.com/cwaffles/ezpptp/master/ezpptp.sh
В скрипте упоминается адаптер venet, однако в lxc он перeименовывается в eth0, поэтому:
sed -i 's/venet0:0/eth0/g' ezpptp.sh chmod +x ezpptp.sh & sudo ./ezpptp.sh
Отвечаем на вопросы скрипта, перезагружаем контейнер и проверяем. Если ваш PPTP VPN аходится за NAT, то пробрасываем к нему GRE и PPTP - порты 47 UDP и 1723 TCP
Включаем debug
Poptop сыпет логи в syslogd в daemon.debug. Поэтому в Ubuntu 16.04 нужно отредактировать файлик /etc/rsyslog.d/50-default.conf или добавить новый в этой же диреткории и дописать туда:
daemon.debug /var/log/pptpd.log
В файлик /etc/ppp/options нужно добавить
debug
А затем перезапустить rsyslogd и pptpd:
sudo service rsyslog restart sudo service pptpd restart
Discussion