Данная статья посвящена объединению нескольких домашних локальных сетей с прозрачным общим доступом к сетевым ресурсам с помощью VPN. Награжден за внедрение VPN openvpn .
Клиенты и сервер Openvpn устанавливаются на роутеры домашней сети, в данном случае роутеры семейства asus wl500, но данная инструкция вполне применима и к другим роутерам, где есть доступ к ОС и можно установить openvpn. Хотя подобных руководств в Интернете пруд пруди, они написаны больше для администраторов, имеющих большой опыт общения с *nix-системами, а пользователями домашних роутеров в основном являются не хакеры, а обычные пользователи, возможно, видевшие команду Linux линия впервые на этом самом роутере.
Постараюсь написать так, чтобы всем было понятно.
Для тех, кто не любит много букв, чтобы было понятно, о чем речь, под катом вот картинка
Итак, позвольте мне еще раз формализовать задачу.
У нас есть несколько сетей, которые имеют доступ к Интернету через маршрутизатор; нам необходимо обеспечить доступ к ресурсам сетей друг друга через зашифрованный интернет-туннель.
Что вам там понадобится?
- Роутеры семейства asus wl500
- Очень желательно оснастить роутеры флешками, так как у роутера очень мало флешки и оперативной памяти, подойдет абсолютно любая, ну кроме очень редкого барахла, то есть меньше 9Мб.
Чем не отличный повод побаловать себя новой флешкой? :)
- Хотя бы один из роутеров должен выходить в интернет с реальным IP-адресом, либо все роутеры должны находиться в одном сегменте локальной сети провайдера.
- Сети за маршрутизаторами должны иметь разные диапазоны адресов.
- Немного времени и мозга
Бегать из одной квартиры в другую не особо удобно, поэтому можно либо обеспечить доступ из интернета к компьютерам за роутерами (как это сделал я), либо просто собрать роутеры в одной квартире и присоединить клиентские роутеры (упс, я опередил от себя) к серверу-роутеру, то в месте их постоянной работы нужно будет только изменить адрес сервера openvpn.
Теория
Давайте кратко рассмотрим, как будет работать система.Сеть состоит из сервера (на картинке это марсианский роутер) и клиентов Земля и Меркурий.
Сервер обеспечивает работу виртуальной сети, шифрование трафика и маршрутизацию пакетов из одной сети в другую.
Более подробно работа сервера показана на следующем рисунке (рисунок весьма условный, он предназначен только для общего понимания и не отражает компоненты программы).
В клиентском режиме openvpn работает точно так же, но не осуществляет маршрутизацию.
Итак, у нас есть сеть с диапазоном адресов 192.168.1.1-192.168.1.255 за первым маршрутизатором (Марс) и с диапазоном 192.168.2.1-192.168.2.255 за маршрутизатором Земли.
OpenVPN создает специальную виртуальную сетевую карту tun0, и попавшие туда пакеты расшифровываются и отправляются на сервер (на серверном компьютере локально, на клиентском компьютере через Интернет), где они расшифровываются и отправляются через необходимые туннели на сервер.
место назначения.
Например, рассмотрим передачу пакета от компьютера Фобоса к компьютеру Луны.
Пакет с Фобоса отправляется на его шлюз по умолчанию — Марс, где в таблице маршрутизации написано, что его следует отправить в туннель tun0, откуда он попадает в openvpn, который уже знает, что пакеты для сети, включающей Луну, следует отправлять на туннель на Землю.
Прибыв на Землю, посылка будет благополучно отправлена на Луну, соединенную с Лоаком.
Упражняться
Прошиваем роутеры прошивкой от Олега и устанавливаем ikpg. Думаю многие пользователи wl500 знают эту процедуру.Здесь очень подробно написано: http://wl500g.info/showthread.phpЭt=3171 .
Нужны шаги 1-4, собственно прошивка и 7, установка дополнительных пакетов.
После того, как все будет готово, устанавливаем туда необходимые пакеты командой ipkg install
- openvpn — ну нетрудно догадаться :)
- vim — текстовый редактор (тот, который встроен в оболочку, совершенно ни для чего не нужен)
- wget-ssl — понадобится для обновления записей в DNS, если у сервера динамический внешний IP.
Как это сделать под Windows (Linux, кажется, уже в теме :)) уже подробно обсуждалось на хабе , здесь нет смысла повторяться, стоит лишь добавить, что ca.key надо убрать куда-нибудь подальше, например записать на ненужную флешку, а флешку положить в сундук с 33 замками, так как зная ca.crt и ca.key вы можете легко подключить к домашней сети, что явно не входит в наши планы.
Имея под рукой сертификаты, необходимо поместить их на роутер, который будет сервером, так как это обычные текстовые файлы, их можно просто скопировать и вставить в текстовый редактор на роутере.
Подключаемся по телнету к роутеру, например C:\> telnet 192.168.1.1 Дальше: $vim /opt/etc/openvpn/keys/ca.crt Затем нажмите кнопку i и вставьте содержимое файла ca.crt. То же самое делаем с файлами dh2048.pem, mars.crt и mars.key. После этого нужно создать файл конфигурации openvpn, который идет в комплекте, его можно выкинуть и вставить вот этот: $rm /opt/etc/openvpn/openvpn.conf $vim /opt/etc/openvpn/openvpn.conf
разработка мелодии tls-сервер сервер 192.168.255.0 255.255.255.0 есликонфигурация 192.168.255.1 192.168.255.2 клиент-конфигурация-каталог ccd маршрут 192.168.255.0 255.255.255.0 #Диапазон IP VPN маршрут 192.168.2.0 255.255.255.0 #IP Диапазон Земли нажмите «маршрут 192.168.1.0 255.255.255.0» #Скажите клиентам, что у Марса есть LAN 192.168.1.0/24 #ключи дх /opt/etc/openvpn/keys/dh1024.pem ок /opt/etc/openvpn/keys/ca.crt сертификат /opt/etc/openvpn/keys/home2.crt ключ /opt/etc/openvpn/keys/home2.key #Не меняйте, если не знаете, что делаете клиент-клиент порт 1194 прото UDP пользователь никто группа никто комп-лзо упорствовать постоянный ключ глагол 3 log-append /opt/var/log/openvpn/openvpn.log статус /opt/var/log/openvpn/status.log поддерживать активность 10 60Создадим директорию, в которой будет находиться конфигурация для клиентов $mkdir /opt/etc/openvpn/ccd/ В этом каталоге нужно создать файлы для тех клиентов, за которыми будут располагаться объединенные сети.
В нашем случае это клиент Earth, создайте файл Earth. $vim /opt/etc/openvpn/ccd/Earth Он будет состоять всего из одной строки
маршрут 192.168.2.0 255.255.255.0Эта строка сообщает openvpn, куда отправлять пакеты для сети 192.168.2.0/24. Итак, перед запуском openvpn остаётся только подправить скрипт запуска /opt/etc/init.d/S20openvpn и убрать оттуда строку return 0. Всё, запускаем openvpn /opt/etc/init.d/S20openvpn Если все в порядке, то вывод будет netstat -ul | grep 1194 должен вывести скрипт
udp 0 0 *:1194 *:*
и в файле /opt/var/log/openvpn/openvpn.log появится запись об успешном запуске сервера.
Итак, сервер запущен, нам нужно разрешить прохождение пакетов через фаервол.
Для этого: $iptables -I INPUT -p udp --dport 1194 -j ACCEPT
$iptables -I FORWARD -i br0 -o tun0 -j ACCEPT
$iptables -I FORWARD -i tun0 -o br0 -j ACCEPT
$iptables -I INPUT -i tun0 -p tcp --dport 80 -j ACCEPT
Чтобы правила применялись каждый раз, их необходимо добавить в файл /usr/local/sbin/post-firewall, а в файл post-mount добавить строку /opt/etc/init.d/S20openvpn чтобы сервер запускался при каждом запуске маршрутизатора ($ обозначает приглашение командной строки, вам не нужно добавлять его в файлы!).
(Вы не забыли записать изменения во flashfs?) На этом настройка сервера практически завершена.
Единственное, если у сервера динамический IP, то нужно убедиться, что клиенты знают, какой IP у сервера в данный момент. Для этого существует такое понятие, как DDNS, то есть динамический DNS. У Asus есть встроенная поддержка некоторых провайдеров DDNS, но не всех, например.
мой Нет. Поэтому я написал простой скрипт, который обновляет IP на DNS, если изменился IP роутера:
Как установить и настроить cron очень подробно написано здесь: wl500g.info/showpost.phpЭp=52524&postcount=1 И так, теперь перейдем к клиенту.#!/bin/sh IFACE="ppp0" TMPFILE="/tmp/oldip.txt" /sbin/ifconfig $IFACE > /dev/null 2>&1 if [ "$?" -ne "0" ] then logger "update_ip.sh: Interface $IFACE is down, exiting." exit 1 fi new=`/sbin/ifconfig $IFACE|grep inet\ addr|sed -e 's/.
*\ addr:\([0-9\.
]*\).
*/\1/'` if [ -f $TMPFILE ] then old=`cat $TMPFILE` else touch $TMPFILE old=" " fi if [ "$new" != "$old" ] then /opt/bin/wget --no-check-certificate " https://dynamicdns.park-your-domain.com/updateЭhost=mars&domain=yourdomain&password=PASSWORD " > /dev/null 2>&1 logger "update_ip.sh: New ip $new detected" echo $new > $TMPFILE fi
Установка клиента абсолютно такая же, как и сервера, единственное, нужно перегнать клиентские ключи (нам понадобятся ca.crt, Earth.crt, Earth.key) и немного другой конфиг.
Не забудьте отредактировать скрипт запуска.
Конфигурация клиента, в удаленном поле нужно вставить адрес сервера
Точно так же применяем правила iptables:client dev tun proto udp remote mars.yourdomain 1194 resolv-retry infinite nobind persist-key persist-tun ca /opt/etc/openvpn/keys/ca.crt cert /opt/etc/openvpn/keys/Earth.crt key /opt/etc/openvpn/keys/Eartth.key ns-cert-type server comp-lzo verb 3 log-append /opt/var/log/openvpn/openvpn.log status /opt/var/log/openvpn/status.log
$iptables -I FORWARD -i br0 -o tun0 -j ACCEPT
$iptables -I FORWARD -i tun0 -o br0 -j ACCEPT
$iptables -I INPUT -i tun0 -p tcp --dport 80 -j ACCEPT
Запускаем на клиенте openvpn, он подключается к серверу и радуемся жизни.
Вы можете смотреть фильмы, фотографии и играть в игры, как будто по локальной сети.
Единственное, чего я не смог сделать, так это синхронизировать внутренние DNS-серверы, поэтому доступ к компьютерам между сетями приходится осуществлять по их IP. Ну, надеюсь, кому-то это будет полезно, я как-то устал писать этот эпический мануал.
Для выполнения домашнего задания подключите компьютер Mercury, чтобы он мог получить доступ к локальным ресурсам из любого места, например, через GPS или общедоступный Wi-Fi. В качестве расширенного домашнего задания удалите возможность Меркьюри подключаться к сети, изменив только конфигурацию Марса.
(с) Иван Лисенков 2009 г.
Теги: #открытый исходный код #vpn #openvpn #настройка Linux #WL-500gP #сетевое соединение #tun
-
Серия Dell Studio 1558-B74P43
19 Oct, 24 -
Онлайн-Рейтинг Книг
19 Oct, 24 -
Невероятная Наглость Смс-Мошенников
19 Oct, 24 -
Спб Транспорт J2Me
19 Oct, 24 -
Самый Большой Аргумент Против Mysql?
19 Oct, 24