OpenVPN

Установка OpenVPN пакетов

opkg install openvpn-easy-rsa openvpn-openssl

Опционально, для поддержки настройки OpenVPN в web интерфейсе роутера нужно установить дополнительный пакет

opkg install luci-app-openvpn

Разворачивание CA, создание ключей/сертификатов

Действия аналогичны пункту по настройке CA и созданию сертификатов для CentOS, за исключением того что положение CA жестко задано в скриптах как /etc/easy-rsa/.

Там находится файл конфигурации openssl - openssl-1.0.0.cnf и файл с содержащий параметры по конфигурации CA - vars.

Определяем параметры по умолчанию в файле vars:

export KEY_COUNTRY="RU"
export KEY_PROVINCE="Kamchatka Krai"
export KEY_CITY="Svetlyy"
export KEY_ORG="Granit"
export KEY_EMAIL="Direhtor@RogaKopita.net""
export KEY_OU="Left kopito"

Загружаем переменные определенные из vars в окружение:

source ./vars

Создаем удостоверяющий центр CA:

./build-ca

Создание ключей для сервера и клиентов

Сервер

Генерируем и подписываем ключ сервера:

./build-key-server VPN_SRV_KEY

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

Создаем ключ Диффи-Хеллмана:

./build-dh

Эта операция потребует некоторого времени.

openvpn --genkey --secret keys/ta.key

Клиенты

Генерируем и подписываем ключ(и) клиента(ов):

source ./vars
./build-key CLIENT_NAME

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

Настройка сетевого интерфейса на OpenWrt

Создаем сетевой интерфейс для OpenVPN (vpn0):

uci set network.vpn0=interface
uci set network.vpn0.ifname=tun0
uci set network.vpn0.proto=none
uci set network.vpn0.auto=1

Разрешаем входящие соединения на порт 1194 который будет слушать сервис OpenVPN:

uci set firewall.Allow_OpenVPN_Inbound=rule
uci set firewall.Allow_OpenVPN_Inbound.target=ACCEPT
uci set firewall.Allow_OpenVPN_Inbound.src=*
uci set firewall.Allow_OpenVPN_Inbound.proto=udp
uci set firewall.Allow_OpenVPN_Inbound.dest_port=1194

Создаем в файерволе роутера зону VPN. В ней разрешаем входящие и исходящие соединения , но доступ к сегментам LAN и WAN все еще запрещен. Разрешена только комуникация VPN клиентов с сервисами на роутере, а также между собой:

uci set firewall.vpn=zone
uci set firewall.vpn.name=vpn
uci set firewall.vpn.network=vpn0
uci set firewall.vpn.input=ACCEPT
uci set firewall.vpn.forward=REJECT
uci set firewall.vpn.output=ACCEPT
uci set firewall.vpn.masq=1

(Опционально) Если VPN клиентам необходимо подключаться к компьютерам локальной сети LAN, то нужно разрешит перенаправление из зоны VPN в зону LAN:

uci set firewall.vpn_forwarding_lan_in=forwarding
uci set firewall.vpn_forwarding_lan_in.src=vpn
uci set firewall.vpn_forwarding_lan_in.dest=lan

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

uci set firewall.vpn_forwarding_lan_out=forwarding
uci set firewall.vpn_forwarding_lan_out.src=lan
uci set firewall.vpn_forwarding_lan_out.dest=vpn

(Опционально) Если VPN клиентам необходимо подключаться к компьютерам сети WAN (internet), то нужно разрешит перенаправление из зоны VPN в зону WAN:

uci set firewall.vpn_forwarding_wan=forwarding
uci set firewall.vpn_forwarding_wan.src=vpn
uci set firewall.vpn_forwarding_wan.dest=wan

Сохраняем изменения:

uci commit network
/etc/init.d/network reload
uci commit firewall
/etc/init.d/firewall reload

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

Копируем ключи в директорию OpenVPN:

mkdir /etc/openvpn/keys
cd /etc/easy-rsa/keys
cp VPN_SRV_KEY.* ca.crt dh2048.pem ta.key /etc/openvpn/keys/

Содаем конфигурацию для OpenVPN сервиса

echo > /etc/config/openvpn # clear the openvpn uci config
uci set openvpn.myvpn=openvpn
uci set openvpn.myvpn.enabled=1
uci set openvpn.myvpn.verb=3
uci set openvpn.myvpn.port=1194
uci set openvpn.myvpn.proto=udp
uci set openvpn.myvpn.dev=tun
uci set openvpn.myvpn.server='10.8.0.0 255.255.255.0'
uci set openvpn.myvpn.keepalive='10 120'
uci set openvpn.myvpn.ca=/etc/openvpn/keys/ca.crt
uci set openvpn.myvpn.cert=/etc/openvpn/keys/my-server.crt
uci set openvpn.myvpn.key=/etc/openvpn/keys/my-server.key
uci set openvpn.myvpn.dh=/etc/openvpn/keys/dh2048.pem
uci set openvpn.myvpn.ifconfig_pool_persist /etc/openvpn/ipp.txt
uci set openvpn.myvpn.tls_auth='/etc/openvpn/keys/ta.key 0'
uci set openvpn.myvpn.client_to_client=1
uci set openvpn.myvpn.cipher=AES-256-CBC
uci set openvpn.myvpn.compress=lz4-v2
uci add_list openvpn.myvpn.push='compress lz4-v2'

Сообщаем OpenVPN клиентам что мы можем быть шлюзом

uci add_list openvpn.myvpn.push='redirect-gateway def1 bypass-dhcp'

Указываем DNS сервера

uci add_list openvpn.myvpn.push='dhcp-option DNS 8.8.8.8'

Комитим изменения uci commit openvpn

Активируем и запускаем сервис /etc/init.d/openvpn enable /etc/init.d/openvpn start