VPN в Ubuntu на примере PPTP

Устанавливаем:

$ sudo apt-get install ppp pptpd iptables-persistent

Дописываем в конец файла /etc/pptpd.conf строки

localip 192.168.11.1
remoteip 192.168.11.10-254

Приводим /etc/ppp/pptpd-options к виду

name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
ms-dns 8.8.8.8
ms-dns 8.8.4.4
proxyarp
nodefaultroute
lock
nobsdcomp

Добавляем пользователей в /etc/ppp/chap-secrets

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses

user1 * password1 *                  # динамический адрес
user2 * password2 192.168.11.251     # статический адрес

Разрешаем форвардинг пакетов - проверяем чтобы в файле /etc/sysctl.conf была строка

net.ipv4.ip_forward=1

а чтобы заработало без перезагрузки перечитываем файл настроек:

$ sudo sysctl -p

или делаем так:

$ sudo echo 1 > /proc/sys/net/ipv4/ip_forward

Добавляем в правила iptables строки (какие именно - смотреть по ситуации)

-A INPUT -p gre -j ACCEPT                                            # Пропускать GRE
-A FORWARDING -p gre -j ACCEPT                                       # Форвардить GRE
-A INPUT -i eth1 -p tcp --dport 1723 -j ACCEPT                       # Разрешить соединения на порт PPTPD
-A POSTROUTING -s 192.168.11.0/24 -o eth0 -j MASQUERADE              # Разрешить маскарадинг для VPN-клиентов
-A FORWARD -p tcp --syn -s 192.168.0.0/24 -j TCPMSS --set-mss 1356   # Устанавливать MSS для стабильного соединения

Перезапускаем, проверяем:

$ sudo service pptpd restart