Декілька OpenVPN-клієнтів на DD-WRT

У порівнянні з іншими прошивками (OpenWRT, Tomato тощо), у прошивці DD-WRT за допомогою веб-інтерфейсу доступно створення тільки одного OpenVPN-клієнта. А якщо потрібно більше?

1. Вмикаємо підтримку файлової системи jffs2, на якій ми будемо зберігати файли конфігурації. Йдемо в Administration -> Management. Шукаємо JFFS2 Support й вмикаємо.
2. Під’єднуємось до маршрутизатора за протоколом ssh. У Windows можна використовувати Putty. Ім’я користувача: root, пароль: <ваш пароль>.
3. Створюємо обов’язкові директорії:
cd /jffs/
mkdir etc
mkdir etc/config

3.1 Далі крок необов’язковий, адже всі файли можна складати до /jffs/etc/config/, але для зручності раджу розкласти файли по директоріям:
mkdir etc/config/openvpn
mkdir etc/config/openvpn/client1
mkdir etc/config/openvpn/client2

4. Створюємо файл, який буде запускати клієнтів OpenVPN під час підняття wan-інтерфейсу:
touch /jffs/etc/config/multi-openvpn.wanup
5. Виставляємо права на файл:
chmod 700 /jffs/etc/config/multi-openvpn.wanup
6. Відкриваємо файл (vi /jffs/etc/config/multi-openvpn.wanup) й пишемо наступне :
#!/bin/sh

CHECKTUNMODULE=`lsmod |grep tun | awk '$1 == "tun" {print $1}'`
if [ "$CHECKTUNMODULE" != tun ]
then
modprobe tun
fi

sleep 3

OPVPNENABLE=`nvram get openvpncl_enable | awk '$1 == "0" {print $1}'`
if [ "$OPVPNENABLE" != 0 ]
then
nvram set openvpncl_enable=0
nvram commit
fi

sleep 5

openvpn --config /jffs/etc/config/openvpn/client1/client1.ovpn --route-up /jffs/etc/config/openvpn/client1/route-up.sh --route-pre-down /jffs/etc/config/openvpn/client1/route-down.sh

sleep 20

openvpn --config /jffs/etc/config/openvpn/client2/client2.ovpn --route-up /jffs/etc/config/openvpn/client2/route-up.sh --route-pre-down /jffs/etc/config/openvpn/client2/route-down.sh

7. За допомогою, наприклад, WinSCP завантажуємо на маршрутизатор файли конфігурацій, ключі та сертифікати до відповідних директорій. Перейменуйте файли конфігурацій на client1.ovpn та client2.ovpn.

8. Переходимо до налаштування першого клієнта:
vi /jffs/etc/config/openvpn/client1/client1.ovpn
9. Файл конфігурації повинен мати приблизно такий вигляд:

client
dev tun0
proto udp
remote your.vpn.server 1194
daemon client1
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3
mute 3
auth-nocache
script-security 2
mssfix 0
tun-mtu 1500
ca /jffs/etc/config/openvpn/client1/cacert.pem
cert /jffs/etc/config/openvpn/client1/client1.pem
key /jffs/etc/config/openvpn/client1/client1.key
cipher AES-256-CBC
auth SHA256
10. Створюємо файли, які будуть виконуватися при піднятті та знищенні клієнта OpenVPN. Також виставляємо на них права:

touch /jffs/etc/config/openvpn/client1/route-up.sh

touch /jffs/etc/config/openvpn/client1/route-down.sh

chmod 700 /jffs/etc/config/openvpn/client1/route-up.sh

chmod 700 /jffs/etc/config/openvpn/client1/route-down.sh

11. Відкриваємо файл (vi /jffs/etc/config/openvpn/client1/route-up.sh) й пишемо наступне:

#!/bin/sh
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -I INPUT -i tun0 -j ACCEPT
iptables -I FORWARD -i tun0 -j ACCEPT
iptables -I FORWARD -o tun0 -j ACCEPT

12. Для другого файлу (vi /jffs/etc/config/openvpn/client1/route-down.sh):

#!/bin/sh
iptables -t nat -D POSTROUTING -o tun0 -j MASQUERADE
iptables -D INPUT -i tun0 -j ACCEPT
iptables -D FORWARD -i tun0 -j ACCEPT
iptables -D FORWARD -o tun0 -j ACCEPT

13. Для другого клієнта повторюємо кроки 8-12, замінюючи client1 на client2 та tun0 на tun1.

14. Перезавантажуємо маршрутизатор або запускаємо без перезавантаження наступною командою:

/jffs/etc/config/multi-openvpn.wanup