Openvpn и роутер в одной сети

Время на прочтение
6 мин

Количество просмотров 98K

Данная статья посвящена объеденению нескольких домашних локальных сетей с предоставлением прозрачного общего доступа к ресурсам сетей с помощью 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 к роутеру, например

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

dev tun

tls-server
server 192.168.255.0 255.255.255.0
ifconfig 192.168.255.1 192.168.255.2

client-config-dir ccd

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

#keys

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

client-to-client

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

keepalive 10 60

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

$mkdir /opt/etc/openvpn/ccd/

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

$vim /opt/etc/openvpn/ccd/Earth

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

iroute 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

Если всё 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 роутера изменился:

#!/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

Как поставить и настроить 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.

(С) Иван Лисенков 2009

Эта статья подходит для: 

Archer C1200 , Archer C5400 , Archer A2600 , Archer AX55 , Archer AX53 , Archer AX10 , Archer AX51 , Archer AX96 , Archer AXE95 , Archer AX10000 , Archer AX50 , Archer C3150( V2 ) , Archer C6( V2 ) , Archer C7( V4 V5 ) , Archer AX90 , Archer AX6000 , Archer C5400X , Archer A20 , Archer AX1800 , Archer AX206 , Archer AX4200 , Archer C3200( V2 ) , Archer AX75 , Archer AX4400 , Archer AX73 , Archer A10 , Archer AX4800 , Archer A2300 , Archer AXE75 , Archer A6( V2 V3 ) , Archer A7 , Archer AX72 , Archer AXE200 Omni , Archer GX90 , Archer A9 , Archer AX68 , Archer C2300 , Archer AX5300 , Archer AX23 , Archer AX20 , Archer C3150 V2 , Archer C4000 , Archer AX21 , Archer AXE300 , Archer AX1500 , Archer AX60 , Archer AX11000 , Archer AX3200 , Archer AX3000

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

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

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

a. Как войти в веб-интерфейс Wi-Fi роутера (новый логотип)?

b. Как войти в веб-интерфейс Wi-Fi роутера (новый логотип)?

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 серверу.

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

Был ли этот FAQ полезен?

Ваш отзыв поможет нам улучшить работу сайта.

Что вам не понравилось в этой статье?

  • Недоволен продуктом
  • Слишком сложно
  • Неверный заголовок
  • Не относится к моей проблеме
  • Слишком туманное объяснение
  • Другое

Как мы можем это улучшить?

Спасибо

Спасибо за обращение
Нажмите здесь, чтобы связаться с технической поддержкой TP-Link.

В этой статье я расскажу о том как можно объединить два роутера с OpenVPN и обеспечить прямой доступ между подключенными к ним устройствами.


Часть 1. Введение. Топология.
Часть 2. OpenVPN Server на Asus RT-N10U.
Часть 3. Тестирование подключения изнутри и извне.
Часть 4. Подключение извне с роутера Netgear DGN2200.

Дано: два роутера(Netgear DGN2200 и Asus RT-N10U) с подключенными к ним устройствами в представленной ниже топологии.

Диаграмма1

К роутеру Netgear(адрес 192.168.105.1, подсеть 192.168.105.0/24) подключен ноутбук(192.168.105.6). К роутеру Asus(адрес 192.168.100.1, подсеть 192.168.100.0/24) подключены компьютер(192.168.100.3) и планшет(192.168.100.4).

Всем устройствам в подсетях назначены статические IP. Числа в последних байтах IP-адресов не пересекаются для удобства запоминания адресов. Ничто не мешает сделать их пересекающимися или любыми другими.

Решить: объединить роутеры в одну виртуальную подсеть, обеспечив доступ между устройствами в уже существующих подсетях; обеспечить доступ к получившейся сети извне, например со смартфона.

Топология целевого решения изображена ниже.

Диаграмма2

OpenVPN сервер на Asus образует новую подсеть 192.168.110.0/24. Все устройства, которым потенциально необходим доступ в эту подсеть получают в ней свой клиентский адрес. Компьютер получает свой адрес(192.168.110.3) т.к. при помощи него будет проводиться вся настройка и тестирование. Планшет получает свой адрес(192.168.110.4), т.к. может быть унесен с собой и использован вне домашней подсети. Для доступа извне также используется смартфон(192.168.110.5). Роутер Netgear получает свой адрес(192.168.110.2). Ноутбук не получает адреса т.к. используется в качестве стационарного. Доступ к нему по его IP и с него к другим устройствам будет настроен, как решение поставленной задачи.

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

Netgear DGN2200 на счастье оказался версии v3 и был перепрошит на прошивку amod. Файла прошивки на момент решения задачи(v3.2.2) к сожалению не осталось, поэтому забэкаплю для вас последнюю актуальную.

На Asus RT-N10U давно не выпускались обновления популярной DD-WRT, поэтому была выбрана прошивка Tomato в редакции от Shibby. На момент решения задачи последняя версия была 1.24(с поддержкой USB и VPN).

Описывать процесс перепрошивки я не буду, т.к. местами он тривиален(Netgear), а местами уже и так размусолен. Отмечу лишь, что сам переходил на Tomato c DD-WRT версии 21061.

Далее нам необходимо настроить OpenVPN Server на Asus RT-N10U.

[Wireless Router] How to set up two way communication on OpenVPN server

Under default OpenVPN server configuration, it only allow one-way communication. It means only allow your client side LAN device reach the device of server side.

One way communication:

If you would like to setup two-way communication, except general setting, you have to go to Advanced Setting” to add your client side information in allowed clients list to reach two way communication.

Two way communication:

Base on your configuration, there are two setup method

Method 1. Setup the certification generated by the ASUS router

Method 2. Setup with Username / Password Auth. Only

Method 1. Please follow the steps below to set up the certification generated by the ASUS router

Step 1. Connect your computer to the router via wired or WiFi connection and enter http://www.asusrouter.com to the WEB GUI.

           

Step 2. Key in your router’s username and password to log in.

           

   Note: If you forget the user name and/or password, please restore the router to the factory default status and setup.

             Please refer to [Wireless Router] How to reset the router to factory default setting? for how to restore the router to default status.

Step 3. Go to OpenVPN profile and switch to Advanced Settings of VPN Details.

           [VPN] > [VPN Server] > Click [OpenVPN] and enable > Switch to [Advanced Settings] of VPN Details > Click [Professional]

          

Step 4. Turn on [Manage Client-Specific Options] and [Allow only specific clients] options of Professional.

           

Step 5. Click  «ADD» button of [Allowed Clients] and enter your client side information, please note that you can only enter  «client» on Common Name(CN) to match the default settings in the certificate for successfully connection.

          

Step 6. After setting, you can see your configuration in the [Allowed Clients] list.

         

Method 2. Please follow the steps below to set up with Username / Password Auth. Only

Step 1. Connect your computer to the router via wired or WiFi connection and enter http://www.asusrouter.com to the WEB GUI.

           

Step 2. Key in your router’s username and password to log in.

                      

   Note: If you forget the user name and/or password, please restore the router to the factory default status and setup.

             Please refer to [Wireless Router] How to reset the router to factory default setting? for how to restore the router to default status.

Step 3. Go to OpenVPN profile. Switch to Advanced Settings of VPN Details and turn on [Username / Password Auth. Only option].

           [VPN] > [VPN Server] > Click [OpenVPN] and enable > Switch to [Advanced Settings] of VPN Details > Click [Professional] > Turn on [Username / Password Auth. Only option].

          

Step 4. Turn on [Manage Client-Specific Options] and [Allow only specific clients] options of Professional.

         

Step 5. Below is the example Username: asus01

          Click «ADD» button of [Allowed Clients] and fill in your client side information, please enter the Username which you provide to client side for successfully connection.

        

Client side information

[VPN] > [VPN Server] > Click [OpenVPN] and enable > Switch to [General] of VPN Details > Click «ADD» button of [VPN Client(Max Limit:16)] > Enter your VPN Client username and password > Click [OK] to save setting.

Step 6. After setting, you can see your configuration in the [Allowed Clients] list.

How to get the (Utility / Firmware)?

You can download the latest drivers, software, firmware and user manuals in the ASUS Download Center.

If you need more information about the ASUS Download Center, please refer this link.

Хочется иметь общую сетевое окружение с товарищем из другого города? 

Сегодня расскажу и покажу как корректно настроить два роутера, из заголовка видно какие именно и естественно видно на какой прошивке все эти действия будут проводиться. В этой статье ТЫЦ видно — что откуда качать и как устанавливать. Поэтому начну сразу с момента, когда OpenVPN-сервер создаёт пользователя, и этот самый пользователь становится OpenVPN-клиентом.

Настройки OpenVPN-сервера:

Берём роутер-клиент (далее клиент) и настраиваем на нём IP-адрес LAN и DHCP-сервер. Нужно сделать так, чтобы конфликтов не произошло между роутером-сервером (далее сервер) и клиентом. Думаю раз уж прошивку поставили, то и сами догадываетесь как правильно пул IP-адресов раскидать (не должно быть конфликтов IP-адресов).

Включаем SSH-сервер в меню «Администрирование — Сервисы»

Скачиваем прогу WinSCP, это графическая оболочка SSH.

На сервере создаём пользователя OpenVPN, далее файлик скачивается и при открытии мы видим следующую картину

Это client.conf (синий), ca.crt (красный), client.crt (желтый), client.key (оранжевый). Выделил цветным те области, которые необходимо будет скопировать. Черный шрифт пропускаем мимо глаз.

Включаем OpenVPN-клиент на клиенте, вбиваем параметры. Наживаем «применить»

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

Включаем WinSCP, SFTP-протокол передачи и вводим IP-адрес клиента, порт 22 остаётся, далее логин/пароль от клиента и наживаем «Войти». Далее нажимаем «Нет» (чтобы в кэше пароль не сохранялся) в итоге всё подключилось и идём по пути /etc/storage/openvpn/client:

И вот эти сертификаты и ключи надо создать (с расширениями думаю все умеют возиться, .txt в .crt и .key перевести не составит труда), копируя инфу в них из созданного на сервере файла. Для удобства выше выделил цветами нужный текст, который необходимо скопировать. Пример cодержимого в ca.crt:

В итоге всё должно заработать. В случае неудачи перезагрузите все роутеры

  • Onlime роутер свой как настроить
  • Onemesh что это такое в роутере
  • One mesh что это в роутере
  • One mesh между двумя роутерами
  • One mash роутер tp link