понедельник, 7 августа 2017 г.

Client OpenVPN MikroTik RB951Ui

Задача: базовая настройка и подключение MikroTik RB951Ui в качестве клиента.  Так же необходимо расшарить его внутреннюю сеть, для доступа из других подсетей.  Подключаться маршрутизатор будет к существующему серверу OpenVPN через файл client.ovpn 

Дано: предполагается, что у нас свежеустановленный OpenWRT. Теперь необходимо поставить OpenVPN (если прошивка была собрана вручную с поддержкой openvpn, то это не требуется)

1-й этап - предварительная настройка маршрутизатора:

Обновление списка доступных пакетов. Установка необходимых компонентов 


 opkg update
 opkg install openvpn-openssl

Для удобства в некоторых настройках, лучше установить веб-морду

 opkg install luci-ssl

Настройка адреса локальной сети. Кастомные DNS


Изменить адрес самого машрутизатора, и адрес его локальной сети на 192.168.14.0/24

Через веб-интерфейс

Network -> Interfaces -> LAN (Edit) -> IPv4 address
И вместе привычного 192.168.1.1 вписываем 192.168.14.1 а диапазон dhcp и другие настройки изменятся автоматом. Надо подождать около минуты, пока все настройки применятся. А после можно уже подключаться по новому адресу к маршрутизатору.

Через консоль

vi /etc/config/network

........
config interface 'lan'
option type 'bridge'
option ifname 'eth1'
option proto 'static'
option netmask '255.255.255.0'
option ip6assign '60'
option ipaddr '192.168.14.1'
option dns '192.168.13.2 192.168.13.15'
........

Опционально можно изменить DNS-сервера для WAN-интерфейса. Получается, что для LAN и WAN можно устаналивать отличные друг от друга DNS-сервера.

Через веб-интерфейс

Network -> Interfaces -> WAN -> Edit -> Advance settings 

Use DNS servers advertised by peer - снять галку, и появится поле Custom DNS
Добавляем еще одно поле через "+", и в каждое поле по одному DNS вписываем
192.168.13.2
192.168.13.15

Через консоль

vi /etc/config/network
......
config interface 'wan'
option ifname 'eth0'
option proto 'dhcp'
option peerdns '0'
option dns '192.168.13.2 192.168.13.15'
.......

Настройка DHCP сервера 


Чтобы  DHCP выдавал dns-сервера: 192.168.13.2 и 192.168.13.15  переходим в

Interfaces -> LAN -> Edit -> DHCP Server -> Advance settings

И в поле DHCP options вписываем
6,192.168.13.2,192.168.13.15

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

Через консоль

vi /etc/config/dhcp
........
config dhcp 'lan'
option interface 'lan'
option start '100'
option limit '150'
option leasetime '12h'
option dhcpv6 'server'
option ra 'server'
option ra_management '1'
list dhcp_option '6,192.168.13.2,192.168.13.15'
.........
Чтобы в качестве локального домена был какой-нибудь example.com вместо lan, редактируем

vi /etc/config/dhcp

В секции
confg dnsmasq
меняем значение
option domain 'lan'
на
option domain 'example.com'

Настройка WiFi 



Веб-версия
Здесь все понятно и без знаний английского. Стоит только отметить, что по умолчанию маршрутизатор работает в режиме клиента. 

Network -> Wireless ->  Enable

Консольная версия

vi /etc/config/wireless

config wifi-iface
option device 'radio0'
option network 'lan'
option mode 'ap'
option ssid 'Access-point-wifi'
option hidden '0'
option encryption 'psk-mixed'

option key 'Password-of-access-point'


Предварительная настройка FireWall


Чтобы работал интернет у клиентов сети 192.168.14.0/24 необходимо изменить правило для зоны lan в firewall.

Веб-версия

Network -> Firewall ->lan (edit: поставить напротив forward - accept), иначе пакеты будут дропаться, и интернет будет только у самого машрутизатора.

Консольная версия
.........
config zone
option name 'lan'
list network 'lan'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT'
..........

Настройка hostname, timezone и зажигаем светодиоды в ваших сердцах RB951Ui


Веб-вариант смены hostname и timezone
System -> System 
Hostname: OpenWRT
и OpenWRT меняем на свой
Timezone можно выбрать из выпадающего списка.

Консольный вариант смены hostname и timezone

vi /etc/config/system
.........
config system
option ttylogin '0'
option hostname 'office-k'
option zonename 'Europe/Moscow'
.........

Чтобы зажечь светодиоды, необходимо в конец /etc/config/system  вставить

config led 'act'
      option trigger 'netdev'
      option mode 'link tx rx'
      option sysfs 'rb:green:act'
      option name 'ACT'
      option dev 'eth1'
      option brightness '0'
config led 'p1'
      option trigger 'netdev'
      option name 'Port_1'
      option sysfs 'rb:green:port1'
      option dev 'eth0'
      option mode 'link tx rx'
config led 'p2'
      option trigger 'switch0'
      option name 'Port_2'
      option sysfs 'rb:green:port2'
      option port_mask '0x10'
      option mode 'link tx rx'
config led 'p3'
      option name 'Port_3'
      option sysfs 'rb:green:port3'
      option trigger 'switch0'
      option port_mask '0x8'
      option mode 'link tx rx'
config led 'p4'
      option name 'Port_4'
      option trigger 'switch0'
      option sysfs 'rb:green:port4'
      option port_mask '0x4'
      option mode 'link tx rx'
config led 'p5'
      option name 'Port_5'
      option sysfs 'rb:green:port5'
      option trigger 'switch0'
      option port_mask '0x2'
      option mode 'link tx rx'
config led 'wlan'
      option sysfs 'rb:green:wlan'
      option name 'WLAN'
      option trigger 'phy0tpt'

А чтобы 5-й порт не горел как глаз Терминатора, необходимо выполнить

echo "echo 0 > /sys/class/gpio/gpio2/value" > /lib/preinit/99_POE_Pot5

После ребута все линки будут гореть нормально, и без всякого красного.


Watchdog 

В случае отвала интернетов и успешного его восстановления, необходимо передернуть сеть. Вариант с watchcat мне не очень нравится, а с документацией по watchdog еще поразбираюсь. Поэтому  решением будет таким:

Открываем список заданий в cron (обычно, файл пуст)

crontab -e

Добавляем сточку

* * * * *   /root/watchdog.sh

Создаем файл 

vi /root/watchdog.sh

с таким вот текстом

#!/bin/ash

tries=0
while [[ $tries -lt 5 ]]
do
if /bin/ping -c 2 8.8.8.8 >/dev/null
then
exit 0
fi
tries=$((tries+1))
done

/etc/init.d/network restart ; /etc/init.d/openvpn restart
exit 0

Не забываем про правушки-муравушки

chmod +x /root/watchdog.sh

2-й этап - конфигурирование клиентской части OpenVPN

Правка конфигурационного файла демона OpenVPN (console only)


Сохраняем старый файл

 mv /etc/config/openvpn /etc/config/openvpn/orig.openvpn

Копируем файл на маршрутизатор:

scp client.ovpn root@192.168.14.1:/etc/openvpn

Создаем новый файл с таким содержанием

 vi /etc/config/openvpn

package openvpn

config openvpn cryptn_vpn
        # Set to 1 to enable this instance:
        option enable 1

        # Include OpenVPN configuration
        option config /etc/openvpn/client.ovpn

Сохраняем, закрываем.


Включаем автозагрузку (вариант здорового человека)

/etc/init.d/openvpn enable

Запускаем

 /etc/init.d/openvpn start

Теперь необходимо добавить интерфейс, чтобы к нему потом применить правила firewall

cat >> /etc/config/network << EOF
config interface 'work_ovpn'
       option proto 'none'
       option ifname 'tun0'
EOF
Добавление новой зоны и назначение правил в ней

cat >> /etc/config/firewall << EOF 
config zone 
       option name 'ovpn_fw' 
       option input 'ACCEPT' 
       option output 'ACCEPT' 
       option forward 'ACCEPT' 
       option masq '1'  
       option network 'work_ovpn' 

config forwarding 
        option dest 'ovpn_fw' 
        option src 'lan' 
EOF