OpenWRT + OpenVPN для Asterisk. Бюджетный способ организации VPN сети

в 18:33, , рубрики: asterisk, diy или сделай сам, mr3020, open source, openvpn, OpenWrt, tp-link mr3020, метки: , , ,

imageЭто очередная статья о роутере MR3020, OpenWRT и OpenVPN. Бонусом я выкладываю готовую прошивку для этого роутера с установленным OpenVPN, текстовым редактором Nano и wget. В прошивке отключено всё лишнее, включая вэбинтерфейс, ipv6 и WiFi.

Работа с роутером возможна только через telnet и SSH. Писать, как поднять сервер OpenVPN я не буду, статей об этом куча, лично мне помогла вот эта статья.

Предистория

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

Был куплен TP-Link MR3020 для теста, а после успешного тестирования докуплена ещё парочка этих малышей.

Хоть роутер и имеет всего один LAN порт, подключать его на точках оказалось очень удобно. Нет необходимости ставить в непосредственной близости к друг к другу Voip-шлюз и роутер. Подготовленный роутер подключается в любой свободный сетевой порт на удаленной точке, Voip-шлюз так же можно подключить в любой свободный сетевой порт, указав шлюзом IP-адрес нашего роутера. Естественно, оба они должны быть в одной сети с интернет-шлюзом.

Настройка роутера

Если MR3020 свеженький, то заходим в вэбинтерфейс и заливаем прошивку через соответствующее меню. Если на роутере уже стоит OpenWRT, то действуем следующим образом:

Заходим на роутер по telnet или SSH и выполняем:

cd /tmp/ && wget http://alians-it.pro/images/files/openwrt-ar71xx-generic-tl-mr3020-v1-squashfs-factory.bin && mtd -r write openwrt-ar71xx-generic-tl-mr3020-v1-squashfs-factory.bin firmware

Если нет интернета, то любым способом заливаем на роутер прошивку, например, через SSH (scp) или, как это делаю я: установите себе на компьютер веб-сервер, положите прошивку в www директорию и так же через wget скачайте прошивку, но уже со своего компьютера.

Если сделали что-то не так или забыли адрес роутера, можно перевести его в «аварийный режим»: Выключаем/включаем роутер; ждём, пока светодиод под кнопкой WPS/RESET не начнет мигать примерно раз в секунду (WPS/RESET до этого момента горит 3 секунды, потом гаснет на 3 секунды), сразу нажимаем эту кнопку и ждем, пока не начнет мигать очень быстро, отпускаем кнопку. Всё, роутер доступен через telnet по адресу 192.168.1.1. Настраиваем сеть и перепрошиваем.

После успешной прошивки заходим на роутер через telnet по адресу 192.168.1.1 и устанавливаем пароль для root:

passwd

Вводим пароль два раза, и перезагружаем роутер:

reboot

После перезагрузки роутер будет доступен только по ssh, логин root пароль тот, что вы указали.

Настройка сети:

nano /etc/config/network

Приводим файл к следующему виду:

config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option ula_prefix 'fd69:9e94:7464::/48'

config interface 'lan'
        option ifname 'eth0'
        option force_link '1'
        option type 'bridge'
        option proto 'static'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option ipaddr '192.168.1.11'
        option gateway '192.168.1.10'
        option dns '8.8.8.8'
        option delegate '0'

Отредактировать надо раздел:

config interface 'lan'

Где 192.168.1.10 — адрес интернет-шлюза в сети удаленной точки, а 192.168.1.11 — это любой свободный адрес, который будет у нашего роутера. Если у вас свободен адрес 192.168.1.1, то добавляем только

option gateway '192.168.1.10'
option dns '8.8.8.8'

.
DNS по желанию.

Настройка OpenVPN:

Переходим и копируем в папку /etc/openvpn/ ключи и сертификаты. Я для удобства складываю всё в архив и скачиваю разом:

cd /etc/openvpn/ && wget http://192.168.1.5/client_Sushi_Terra.tar.gz && tar xzvf client_Sushi_Terra.tar.gz

Как вы догадались, 192.168.1.5 — адрес моего рабочего компьютера с установленным вэбсервером, а client_Sushi_Terra — это имя удаленной точки, придуманное при генереции сертификатов и ключей на OpenVPN сервере.

Редактируем конфигурацию клиента:

nano /etc/openvpn/client.conf

Было

client
port port
remote ip-adres
proto udp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client_Sushi_Terra.crt
key /etc/openvpn/client_Sushi_Terra.key
#cipher BF-CBC
#auth MD5
pull #
comp-lzo
persist-key
persist-tun
verb 3

Стало

client
port 7193
remote 37.193.254.254
proto udp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client_Sushi_Terra.crt
key /etc/openvpn/client_Sushi_Terra.key
#cipher BF-CBC
#auth MD5
pull #
comp-lzo
persist-key
persist-tun
verb 3

Где port 7193 и remote 37.193.254.254 — порт и адрес OpenVPN сервера.
Так же настраиваем масквардинг на порту tun0 после успешного старта OpenVPN:

echo 'iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE' >> /etc/init.d/openvpn

Ещё раз перезагружаем роутер:

reboot

Теперь роутер будет доступен по адресу 192.168.1.11.

Если всё правильно, появится новый интерфейс tun0.

Настройка огненной стены:

Открываем файл /etc/config/firewall для редактирования:

nano /etc/config/firewall

config defaults
        option syn_flood '1'
        option output 'ACCEPT'
        option forward 'ACCEPT'
        option input 'ACCEPT' #'DROP'

config include
        option path '/etc/firewall.user'


config rule
        option target 'ACCEPT'
        option name 'ssh'
        option proto 'tcp'
        option src '*'
        option src_port '22'
        option dest_port '22'

И заменяем:

option input 'ACCEPT' #'DROP'

На:

option input 'DROP'

Теперь роутер будет доступен только на 22 порту, хотя по другому до него итак никак не достучаться. Можно вместо "*" указать ip-адрес, и это будет единственный адрес, с можно будет зайти на роутер по ssh.

Настройка VoIP шлюза

Настройка сети: указываем в качестве интернет шлюза ip адрес нашего роутера:

image

У меня OpenVPN поднят на том же сервере, что и Asterisk, поэтому я указываю в качестве sip proxy адрес OpenVPN сервера.

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

Настройка SIP: указываем в качестве sip proxy: адрес сервера Asterisk.

image

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

Добавлю ещё, что рекомендую настраивать firewall как на сервере с Asterisk, так и на сервере с OpenVPN — так, как будто внутренняя сеть, в том числе и VPN такая же агрессивная среда, как и публичный интернет.

Автор: Ash666

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js