Важно! Прежде чем начать нам потребуется узнать версию Raspbian (Debian) на вашей машине. От этого будут зависеть некоторые тонкости.
1. Выполните команду
sudo cat /etc/os-release
в первой строке вывода будет информация о версии. Например:
PRETTY_NAME="Raspbian GNU/Linux 8 (jessie)"
Итак, если у вас Jessie, то выполняйте пункты с 1 по ... Если Wheezy то идите в конец страницы, там вас ждут некоторые небольшие хлопоты.
Немного теории.
Сначала устанавливаем соединение IPsec, которое и создает шифрованный туннель. Затем внутри этого туннеля запускается протокол L2TP для авторизации по имени пользователя и паролю системы VPNKI.
Debian Jessie
*** Сначала IPSEC
2. Установим пакет strongswan для шифрования IPsec
sudo apt-get install -y strongswan
3. Добавим в файл /etc/ipsec.secrets общий ключ для всех соединений
sudo nano /etc/ipsec.secrets
вот прямо вот такой текст
: PSK "vpnki"
Сохраняем Ctrl+X
4. Откроем файл /etc/ipsec.conf
sudo nano /etc/ipsec.conf
и добавим в конец
conn %default
ikelifetime=16h
keylife=12h
rekeymargin=3m
keyingtries=1
keyexchange=ikev1
authby=secret
aggressive = no
conn vpnki-l2tp
authby=secret
auto=add
rekey=no
type=transport
right=msk.vpnki.ru ### в случае использования московского сервера vpnki или ams.vpnki.ru в случае сервера в Амстердаме
rightid=%any
rightprotoport=17/1701
ike=aes256-sha1-modp2048
esp=aes256-null
left=%any
leftprotoport=17/%any
dpdaction=clear
Сохраняем Ctrl+X
5. Перезапустим strongswan
sudo ipsec restart
6. Проверим что IPsec устанавливает туннель, выполните команду
sudo ipsec up vpnki-l2tp
7. Проверим, что ассоциации созданы
sudo ipsec statusall
(добавить скриншот)
*** Затем xl2tpd
Инструкция для версии xl2tpd-1.3.1 (узнать версию можно из /var/log/syslog при старте xl2tpd)
8. Установим пакет xl2tpd для подключения по протоколу L2TP
sudo apt-get install -y xl2tpd
9. Настроим пакет xl2tpd, для этого добавим в файл /etc/xl2tpd/xl2tpd.conf новое соединение с именем vpnki
sudo nano /etc/xl2tpd/xl2tpd.conf
и добавим в конец следующий текст
[lac vpnki]
lns = msk.vpnki.ru
require chap = yes
refuse pap = yes
require authentication = yes
name = <имя пользователя в формате userXXXX>
ppp debug = yes
pppoptfile = /etc/ppp/options.l2tpd.client
length bit = yes
10. Создадим новый файл
sudo nano /etc/ppp/options.l2tpd.client
и добавим туда
ipcp-accept-local
ipcp-accept-remote
refuse-eap
require-chap
noccp
noauth
crtscts
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
lock
#proxyarp
connect-delay 5000
name <имя пользователя vpnki в формате userXXXX>
password <пароль для пользователя vpnki userXXXX>
remotename vpnki
ipparam vpnki
Сохраняем Ctrl+X
11. Создайте управляющий файл для демона xl2tpd
sudo mkdir -p /var/run/xl2tpd
sudo touch /var/run/xl2tpd/l2tp-control
12. Перезапустите демон xl2tpd
sudo service xl2tpd restart
13. Теперь запустите соединение
sudo echo "c vpnki" > /var/run/xl2tpd/l2tp-control
14. Проверим, что соединение успешно установлено. Для этого выполните команду
sudo ifconfig -s
в ней вы должны обнаружить работающий интерфейс ppp0
15. Выполните команду ping для проверки доступности сервера vpnki
ping 172.16.0.1
16. Разорвите соединение командой и перезапустите xl2tpd
sudo echo "d vpnki" > /var/run/xl2tpd/l2tp-control
К сожалению, на момент написания инструкции эта команда приводит к крэшу демона xl2tpd на одной из двух тестируемых нами систем, что описано в баге 838998 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=838998
Поэтому после разрыва соединения лучше выполнить команду перезагрузки демона
sudo service xl2tpd restart
*** Автозапуск при старте
17. Добавим установление соединения ipsec к серверу vpnki при старте системы. Для этого выполните:
sudo nano /etc/ipsec.conf
найдите параметр auto=add и замените его на auto=start
18. Осталось уже немного. Добавим старт соединения к серверу vpnki через соединение xl2tpd при старте системы
Для этого откроем файл
sudo nano /etc/rc.local
и добавим в него:
#!/bin/sh -e
sudo service xl2tpd restart
sudo echo "c vpnki" > /var/run/xl2tpd/l2tp-control
exit 0
Сохраняем Ctrl+X
Обратите внимание, что в скрипте запуска есть команда перезапуска демона xl2tpd. Она нужна по причине наличия ранее описанного бага
19. Протестируем rc.local без перезагрузки
sudo /etc/rc.local
20. Соединение должно установиться. Для проверки выполните команду
sudo ifconfig -s
в ней вы должны обнаружить работающий интерфейс ppp0
Если все ок, значит скрипт в /etc/rc.local работает корректно
*** Маршруты
21. Осталось прописать маршруты. Сделать это можно как вручную, так и получив по DHCP от сервера vpnki
Для автоматического получения о сети VPNKI и сетей ваших других туннелей (DHCP Option 249) необходимо скачать, разархивировать и разместить этот файл (с названием splitp) в /etc/ppp/ip-up.d
Вариант с получением маргрутор по DHCP - НЕ основной, так как не на всех инсталляциях нами был получен качественный результат. Дело в том, что используемый нами далее скрипт splitp не вполне корректно ведет себя с маршрутами в которых встречаются адреса с маской /32 и из-за этого могут быть сложности с маршрутизацией.
Лучше переходите к п.23.
22. Измените права для исполнения файла при поднятии интерфейса
sudo chmod 755 /etc/ppp/ip-up.d/splitp
23. Если вы хотите все прописать руками, то сделать это можно так
В случае обрыва связи и ее восстановлении нам также потребуется автоматически прописать маршруты к сети VPNKI и к вашей "другой" сети. Для этого создайте файл
sudo nano -B /etc/ppp/ip-up.d/routeadd
Добавьте в файл следующие строки:
#!/bin/sh -e
route add -net "172.16.0.0/16" dev "ppp0" #Маршрут к сети VPNKI
route add -net "192.168.100.0/24" dev "ppp0" #Например маршрут к вашей "другой" сети 192.168.100.0/24
Сохраните нажав Ctrl+X
24. Измените права на исполнение файла при поднятии интерфейса ppp0
chmod 755 /etc/ppp/ip-up.d/routeadd
-------------------------------------------------
Если у вас Debian Wheezy
К сожалению для пользователей Wheezy, из репозитория устанавливается пакет strongswan версии 4.x.x, но... устанавливается некорректно (по крайней мере у нас) и поэтому не работает. Для нашей же конфигурации требуется версия пакета strongswan 5.2.1 который легко устанавливается на Jessie. Однако установить его на Wheezy все-таки возможно. Мы, конечно, должны предупредить, что вы делаете все на свой страх и риски и обязательно сделайте бэкап.
Для этого необходимо в перечень репозиториев добавить новые источники:
1. Выполните sudo nano /etc/apt/sources.list и сделайте так, что бы ваша Raspberry могла получать пакеты для двух типов ОС:
deb http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi
deb http://archive.raspbian.org/raspbian wheezy main contrib non-free rpi
# Source repository to add
deb-src http://archive.raspbian.org/raspbian wheezy main contrib non-free rpi
deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi
deb http://archive.raspbian.org/raspbian jessie main contrib non-free rpi
# Source repository to add
deb-src http://archive.raspbian.org/raspbian jessie main contrib non-free rpi
Сохраните Ctrl-X
2. Добавим новые слова для выбора версии ОС при обновлении. Для этого создайте новый файл
sudo nano /etc/apt/preferences
и добавьте в него
Package: *
Pin: release n=jessie
Pin-Priority: 900
Package: *
Pin: release n=wheezy
Pin-Priority: 300
Package: *
Pin: release o=Raspbian
Pin-Priority: -10
Or, if you want to stick to wheezy
Package: *
Pin: release n=wheezy
Pin-Priority: 900
Package: *
Pin: release n=jessie
Pin-Priority: 300
Package: *
Pin: release o=Raspbian
Pin-Priority: -10
Сохраните Ctrl-X
3. Сделайте команду apt-get upgrade для загрузки новых версий приложений
4. Установите требуемую версию strongswan 5.2.1 из репозитория Jessie командой
sudo apt-get install -t jessie strongswan
Если все успешно установилось, то переходите к настройкам ipsec и xl2tpd, которые приведены в пунктах 1 - 24
Наша система будет работать с многими типами домашних и офисных маршрутизаторов. Более подробно смотрите в разделе по настройке оборудования, а начать настройку лучше с этого примера.
ДОПОЛНИТЕЛЬНО ПО ТЕМЕ
- Немного более подробно про IP адреса можно прочитать на нашем сайте
- Про выход в Интернет через VPN и центральный офис можно почитать здесь
- Про удалённый доступ к компьютеру можно почитать на нашем сайте
- Про VPN и протоколы можно почитать здесь