У порівнянні з іншими прошивками (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