spvd.ru
spvd.ru
Павел Селиванов. Статьи, обзоры, заметки

OpenVPN туннель между роутерами с прошивкой DD-WRT, продолжение

Продолжаем копать тему, поднятую статьёй OpenVPN туннель между двумя роутерами с прошивкой DD-WRT, описывающей вариант применения для построения VPN-сети недорогих маршрутизаторов и альтернативной прошивки DD-WRT. В этот раз посмотрим, что можно сделать, чтобы объединить в единую сеть сразу несколько удалённых офисов.

Предыдущая статья была результатом экспериментов по выяснению пригодности технологии для одной дружественной компании. Текст, который вы читаете сейчас, пишется уже после успешного внедрения. Итак, как это было сделано.

Логично будет начать с оборудования. Подойдут любые маршрутизаторы, для которых существует прошивка DD-WRT с OpenVPN. В нашем случае первоначально выбор пал на старичка Linksys WRT54GL, проверенного временем, надёжного и хорошо поддерживаемого альтернативными прошивками.

На двух устройствах на фото можно заметить приклеенные зелёные листочки, это были записаны индивидуальные настройки.

Под крышкой корпуса Linksys WRT54GL чип Broadcom 5352, работающий на частоте 200 МГц, 4 Мб flash и 16 Мб RAM. Но почти сразу стало ясно, что для поддержки более чем 3-4 туннелей его производительности будет маловато. Поэтому для главного офиса, куда сходятся все туннели, был выбран более современный маршрутизатор Asus RT-N16.

Чип Broadcom 4718A на частоте 480 МГц, 32 Мб flash и 128 Мб RAM – то есть существенно мощнее Linksys WRT54GL, и так же поддерживается DD-WRT. То, что нужно.

Прошиваем все маршрутизаторы VPN версией прошивки DD-WRT, и приступаем к настройке. Процедура настройки уже описана в первой части, но есть некоторые отличия в скриптах. Разобраться в конфигурационных скриптах поможет схема.

Поняв соответствие между схемой и приведёнными ниже примерами скриптов, полагаю, будет несложно сделать следующий шаг и понять, как смасштабировать этот пример на большее количество туннелей.

Маршрутизатор первого филиала (на схеме), startup скрипт:

########################################
# Переход в каталог с разрешением на запись
cd /tmp
# Создание файла конфигурации туннеля
echo "
remote 1.1.1.1
proto udp
port 2001
dev tun0
secret /tmp/static.key
verb 3
comp-lzo
keepalive 15 60
daemon
" > tun-1.conf
# Создание файла ключа
echo "
-----BEGIN OpenVPN Static key V1-----
   текст первого ключа
-----END OpenVPN Static key V1-----
" > static.key
# Ссылка на запускаемый файл демона OpenVPN
ln -s /usr/sbin/openvpn /tmp/myvpn
# Создание и настройка туннельного интерфейса
/tmp/myvpn --mktun --dev tun0
ifconfig tun0 10.0.1.2 netmask 255.255.255.0 promisc up
# Добавление правил маршрутизации
route add -net 192.168.0.0 netmask 255.255.255.0 gw 10.0.1.1
route add -net 192.168.2.0 netmask 255.255.255.0 gw 10.0.1.1   #<<<
# Запуск туннеля в соответствии с настройками после трёхсекундной паузы
sleep 3
/tmp/myvpn --config tun-1.conf
########################################

firewall скрипт:

########################################
iptables -I INPUT 2 -p udp --dport 2001 -j ACCEPT
iptables -I FORWARD -i br0 -o tun0 -j ACCEPT
iptables -I FORWARD -i tun0 -o br0 -j ACCEPT
########################################

Второй филиал, startup:

########################################
cd /tmp
echo "
remote 1.1.1.1
proto udp
port 2002
dev tun0
secret /tmp/static.key
verb 3
comp-lzo
keepalive 15 60
daemon
" > tun-2.conf
echo "
-----BEGIN OpenVPN Static key V1-----
<i>текст второго ключа</i>
-----END OpenVPN Static key V1-----
" > static.key
ln -s /usr/sbin/openvpn /tmp/myvpn
/tmp/myvpn --mktun --dev tun0
ifconfig tun0 10.0.2.2 netmask 255.255.255.0 promisc up
route add -net 192.168.0.0 netmask 255.255.255.0 gw 10.0.2.1
route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.0.2.1   #<<<
sleep 3
/tmp/myvpn --config tun-2.conf
########################################

firewall:

########################################
iptables -I INPUT 2 -p udp --dport 2002 -j ACCEPT
iptables -I FORWARD -i br0 -o tun0 -j ACCEPT
iptables -I FORWARD -i tun0 -o br0 -j ACCEPT
########################################

Маршрутизатор центрального офиса, скрипт startup:

########################################
# Переход в каталог с разрешением на запись
cd /tmp
# Файл конфигурации первого туннеля
echo "
proto udp
port 2001
dev tun0
secret /tmp/static-1.key
verb 3
comp-lzo
keepalive 15 60
daemon
" > tun-1.conf
# Файл конфигурации второго туннеля
echo "
proto udp          
port 2002
dev tun1
secret /tmp/static-2.key
verb 3
comp-lzo
keepalive 15 60
daemon
" > tun-2.conf
# Создание первого файла ключа
echo "
-----BEGIN OpenVPN Static key V1-----
   текст первого ключа
-----END OpenVPN Static key V1-----
" > static-1.key
# Создание второго файла ключа
echo "
-----BEGIN OpenVPN Static key V1-----
   текст второго ключа
-----END OpenVPN Static key V1-----
" > static-2.key
# Ссылка на запускаемый файл демона OpenVPN
ln -s /usr/sbin/openvpn /tmp/myvpn
# Создание и настройка туннельных интерфейсов
/tmp/myvpn --mktun --dev tun0
/tmp/myvpn --mktun --dev tun1
ifconfig tun0 10.0.1.1 netmask 255.255.255.0 promisc up
ifconfig tun1 10.0.2.1 netmask 255.255.255.0 promisc up
# Правила маршрутизации
route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.0.1.2
route add -net 192.168.2.0 netmask 255.255.255.0 gw 10.0.2.2
# Запуск туннелей с перерывом в несколько секунд
sleep 3
/tmp/myvpn --config tun-1.conf
sleep 2
/tmp/myvpn --config tun-2.conf
########################################

В примере для каждого туннеля создаётся свой файл с секретным ключом. В принципе, можно сделать проще, немного проиграв в безопасности: записать один файл ключа, например, с именем static.key, и вызывать его в конфигурации каждого туннеля – secret /tmp/static.key.

firewall:

########################################
# Правила для первого филиала
iptables -I INPUT 2 -p udp --dport 2001 -j ACCEPT
iptables -I FORWARD -i br0 -o tun0 -j ACCEPT
iptables -I FORWARD -i tun0 -o br0 -j ACCEPT
# Правила для второго филиала
iptables -I INPUT 2 -p udp --dport 2002 -j ACCEPT
iptables -I FORWARD -i br0 -o tun1 -j ACCEPT
iptables -I FORWARD -i tun1 -o br0 -j ACCEPT
# Межтуннельные правила
iptables -I FORWARD -i tun0 -o tun1 -j ACCEPT   #<<<
iptables -I FORWARD -i tun1 -o tun0 -j ACCEPT   #<<<
########################################

Знаками #<<< в правой части некоторых строк в тексте конфигурационных скриптов я специально отметил часть настроек, реализующую маршрутизацию между удалёнными сетями через центральный роутер.

Вот так, с помощью доступного, в том числе по цене, оборудования можно построить распределённую VPN инфраструктуру. Спасибо Wadih за идею, а Сергею Жидкову, г. Новосибирск, за возможность её реализовать и рассказать об этом.

Оцените материал: 
twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru rutvit.ru myspace.com blogger.com liveinternet.ru livejournal.ru memori.ru google.com yandex.ru
Комментариев: 5
  1. Спасибо, как раз в ближайшее время буду настраивать на 3 (TP-link 1043ND)межофисную сеть. Самое интересное, что вначале прочитал твою статью, но почти ничего не врубил. Пошел дальше гуглить, нашел то-же самое на сайте DDWRT на английском. Прочитал....Теперь и здесь всё стало понятно. К сожалению из-за перевода потерялась часть конкретики. Если добавишь ссылку (http://www.dd-wrt.com/wiki/index.php/OpenVPN_-_Site-to-Site_routed_VPN_between_two_routers) я думаю никто не обидится.

  2. Если автор еще здесь. Статья полезная, но не могу понять почему в обоих случаях на клиентах поднимается tun0, а на центральном маршрутизаторе они поднимаются, как tun0 и tun1. Это опечатка?

  3. Нет, это не опечатка. Всё очень просто, если нумерация начинается с 0, первый или единственный туннельный интерфейс у роутера tun0, второй tun1, третий tun2 и так далее.

  4. Пробую постоить, не получается, дополнительно в настройках сети надо, что-нибудь указывать?

  5. Не могу удалить предыдущий пост. Извините за беспокойство, всё получилось. k2808@mail.ru

    Спасибо за статьи.

Оставить комментарий

Отправка комментария без регистрации. Комментарий публикуется после проверки.

Имя и сайт используются только при регистрации

Комментарий с авторизацией. Также можно сразу зарегистрироваться одновременно с первым комментарием. Для регистрации потребуется указать адрес электронной почты и придумать пароль, на электронную почту придет письмо с дальнейшей инструкцией по завершению регистрации. Комментарий публикуется после проверки.

(обязательно)