Меню Рубрики

Openvpn server за роутером

Как использовать OpenVPN для доступа к домашней сети через Wi-Fi роутер (новый логотип)?

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

Шаг1. Настройка OpenVPN сервера на маршрутизаторе:

1.Войдите в веб-интерфейс маршрутизатора. Если вы не знаете, как это сделать, воспользуйтесь инструкциями:

2.Перейдите в Дополнительные настройки (Advanced) > VPN Server > OpenVPN и отметьте Включить VPN Server (Enable VPN Server).

• Перед включением VPN-сервера рекомендуется настроить службу динамического DNS (рекомендуется), назначить статический IP-адрес для порта WAN маршрутизатора и синхронизировать системное время с интернетом.

• При первой настройке OpenVPN сервера может потребоваться сгенерировать сертификат перед включением VPN-сервера.

3.Выберите Тип Сервиса (Service Type – протокол связи) для OpenVPN сервера: UDP, TCP.

4.Введите Порт VPN Сервиса (VPN Service Port), к которому подключается VPN-устройство, номер порта должен быть от 1024 до 65535.

5. В полях подсеть VPN/маска сети (VPN Subnet/Netmask) введите диапазон IP-адресов, которые могут быть зарезервированы сервером OpenVPN.

6. Выберите тип клиентского доступа (Client Access). Выберите Домашнюю сеть (Home Network Only), только если хотите, чтобы удаленное устройство имело доступ к домашней сети; выберите Интернет и домашнюю сеть (Internet and Home Network), если вы также хотите, чтобы удаленное устройство имело доступ к интернету через VPN-сервер.

7. Нажмите Кнопку Сохранить (Save).

8. Нажмите кнопку Создать (Generate), чтобы получить новый сертификат.

Если сертификат уже создан, пропустите этот шаг или нажмите кнопку Создать (Generate), чтобы обновить сертификат.

9. Нажмите кнопку Экспорт (Export), чтобы сохранить файл конфигурации OpenVPN, который будет использоваться удаленным устройством для доступа к маршрутизатору.

Шаг 2. Настройка OpenVPN подключения на удаленном устройстве:

1. Посетите http://openvpn.net/index.php/download/community-downloads.html для загрузки клиентской утилиты OpenVPN и установить её на устройство, на котором планируете запускать утилиту OpenVPN клиента.

Необходимо установить клиентскую утилиту OpenVPN на каждом устройстве, которое вы планируете применить функцию VPN для доступа к маршрутизатору. Мобильные устройства должны загружать сторонние приложения из Google Play или Apple App Store.

2. После установки скопируйте файл, экспортированный с маршрутизатора, в папку «config» клиентской утилиты OpenVPN (например, C:\Program Files\OpenVPN\config – для Windows). Путь зависит от того, где была установлена утилита OpenVPN .

3.Запустите клиенсткую утилиту и подключите ее к OpenVPN серверу.

Чтобы узнать более подробную информацию о каждой функции и конфигурации, перейдите в Центр загрузки, чтобы загрузить руководство по вашему продукту.

Источник

OpenVPN, объединяем домашние сети

Данная статья посвящена объеденению нескольких домашних локальных сетей с предоставлением прозрачного общего доступа к ресурсам сетей с помощью VPN. За реализацию VPN взята openvpn. Клиенты и сервер openvpn установлены на роутерах домашних сетей, в конкретном случае роутеры семейства asus wl500, но данный мануал вполне применим и другим роутерам где есть досуп к OS и можно поставить openvpn.

Хотя подобных руководств в Интернете пруд пруди, они написаны больше для администраторов, которые имеют большой опыт общения с *nix системами, в то время как пользователями домашних роутеров являются в основном не хакеры, а обычные юзеры, может быть впервые увидевшие коммандную строку Linux на том самом роутере. Я постараюсь писать так чтобы было понятно всем.

Для тех кто не любит много букв, чтобы было понятно о чём речь под катом, привожу картинку

Итак, ещё раз формализую задачу. У нас есть несколько сетей имеющих выход в Интеренет через роутер, нам нужно предоставить доступ к ресурсам сетей друг друга через шифрованный интернет-тунель.

Что там понадобится

  1. Роутеры семейства asus wl500
  2. Очень желательно снабдить роутеры usb-флешками, так как в роутере очень мало флеш и оперативной памяти, подойдёт совершенно любая, ну кроме уж совсем раритеного старья, то есть меньше 9Mb. Чем не отличный повод порадовать себя новой флешкой? 🙂
  3. Хотя бы один из роутеров должен выходить в Интеренет с реальным IP адресом, либо все роутеры должны быть в одном сегменте локальной сети провайдера.
  4. Сети за роутерами должны иметь разный диапазон адресов
  5. Немного времени и мозга

Настраивать роутеры нужно будет вместе, поэтому желательно иметь к ним доступ одновременно. Бегать из одной квартиры в другую не особо удобно, поэтому можно либо обеспечить доступ из Интернета к компьютерам за роутерами (как это сделал я), либо просто собрать роутеры в одной квартире и прицепить клиентские (ой забежал вперёд) роутеры к сервеному, тогда на месте их постоянной работы нужно будет только изменить адрес openvpn сервера.

Теория

Рассмотрим кратко как будет работать система. Сеть состоит из сервера (на рисунке это роутер Mars) и клиентов Earth и Mercury. Сервер обеспечивает функционирование виртуальной сети, шифрование трафика и маршрутизацию пакетов из одной сети в другой.

Более подробно работа сервера показана на следующем рисунке (рисунок очень условный, он только для общего понимания и не отражает компоненты программы). В клиентском режиме openvpn работает точно также, только не осуществляет маршрутизацию.

Итак у нас есть сеть с диапазоном адресов 192.168.1.1-192.168.1.255 за первым роутером (Mars) и с диапазоном 192.168.2.1-192.168.2.255 за роутером Earth. OpenVPN создаёт специальную виртуальную сетевую карту tun0, и пакеты попавшие туда рашифровываются и отправляются на сервер (на серверном компьютере локально, на клинетском через интеренет), где они расшифровывются и отправляются по нужным тунелям до адресата.

Для примера рассмотрим прохождение пакета от компьютера Phobos до компьютера Moon. Пакет от Phobos отправлется на его гейтвей по умолчанию — Mars, там в таблице маршрутизации сказано, что его надо отправить в тунель tun0, там он попадает в openvpn, который уже знает, что пакеты для сети в которую входит Moon следует отправлять в тунель до Earth. Придя на Earth пакет благополучно будет отправлен на подключенную к лоаклке Moon.

Практика

Прошиваем роутеры прошивкой от Олега и ставим ikpg. Думаю многим пользователям wl500ых эта процедура известна. Она очень подробна написана тут: http://wl500g.info/showthread.php?t=3171. Нам необходимы шаги 1-4, собственно прошивка и 7, установка допонительных пакетов.

После того как всё готово ставим необходмы там пакеты командой ipkg install

  • openvpn — ну это нетрудно догадаться 🙂
  • vim — текстовый редактор (тот который встроен в оболочку совершенно ни для чего не годится)
  • wget-ssl — понадобится для обновления записей в dns, если у сервера динамический внешний ip.

Пока пакеты устанавливаются мы немного отвлечемся от Линукса и сгенерим ключи для vpn соединения. Как это сделать под Windows (линуксоиды, думаю, уже в теме 🙂 ) уже подробно рассматривалось на хабре, повторятся тут нет смысла, следует только добавить что ca.key надо бы убрать куда нибудь подальше, например записать на ненужную флешку., а флешку положить в сундук под 33 замка, так как зная ca.crt и ca.key можно спокойно подключится к вашей домашней сети, что ясно не входит в наши планы.

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

$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-server
server 192.168.255.0 255.255.255.0
ifconfig 192.168.255.1 192.168.255.2

route 192.168.255.0 255.255.255.0 #IP Range of VPN
route 192.168.2.0 255.255.255.0 #IP Range of Earth

push «route 192.168.1.0 255.255.255.0»
#Say to clients that Mars has 192.168.1.0/24 LAN

dh /opt/etc/openvpn/keys/dh1024.pem
ca /opt/etc/openvpn/keys/ca.crt
cert /opt/etc/openvpn/keys/home2.crt
key /opt/etc/openvpn/keys/home2.key

#Do not change unless know what you are doing

port 1194
proto udp

user nobody
group nobody

comp-lzo
persist-tun
persist-key
verb 3

log-append /opt/var/log/openvpn/openvpn.log
status /opt/var/log/openvpn/status.log

Создадим директорию в которой будет находится конфигурация для клиентов

В это директории необходимо создать файлы для тех клиентов за которыми будут находится объединяемые сети. В нашем случае это клиент Earth, создаём файл Earth

Он у нас будет состять всего из одной строчки

Эта строчка говорит openvpn куда отправлять пакеты для сети 192.168.2.0/24.

Итак, до запука openvpn осталось только подправить скрипт запуска /opt/etc/init.d/S20openvpn и убрать оттуда строчку return 0.

Всё, запускаем openvpn

Если всё ok, то вывод netstat -ul | grep 1194 дожен выдавать сторчку
udp 0 0 *:1194 *:*

а в файле /opt/var/log/openvpn/openvpn.log Появится запись об успешном запуске сервера.

Итак, сервер работает, надо дать возможность пакетам проходить через firewall.
Для этого:
$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, а строчку /opt/etc/init.d/S20openvpn дописать в post-mount, чтобы сервер стартовал каждый раз при запуске роутера ($ обозначает прилашение командной строки, в файлы его вносить не надо!).

(Вы не забыли записать изменения в flashfs?)

На этом настройка сервера практически закончена. Единственное, если сервер имеет динамический ip, то надо позаботится чтобы клиенты знали какой IP сейчас имеет сервер. Для этого есть такая штука как DDNS, то есть динамический DNS. Asus имеет встроенную поддержку некоторых DDNS провайдеров, но не всех, например моего нет. Поэтому я написал простенький скрипт, который обновляет IP на DNS, если IP роутера изменился:

/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

Как поставить и настроить cron очень подробно написано тут: wl500g.info/showpost.php?p=52524&postcount=1

И так, теперь переходим к клиенту. Установка клиента абсолютно такая же как и сервера, единственное надо перегнать ключи клиента (нам понадобятся ca.crt, Earth.crt, Earth.key) и нменого другом конфиге. Не забудьте подправить скрипт запуска.

Конфиг клиента, в поле remote нужно вставить адрес сервера

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:
$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, чтобы он имел доступ к локальным ресурам из любого места, например по gprs или публичного wifi.

В качестве advanced домашнего задания, отнимите у mercury возможность подсоединятся к сети, изменив только конфигурацию Mars.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Ярлык на рабочий стол linux
  • Яндекс строка для linux
  • Яндекс программы для linux
  • Яндекс навигатор для linux
  • Яндекс диск монтирование linux