Використання TAP інтерфейсу OpenVPN на NAS Synology (з аутентифікацією за сертифікатом)

Передісторія

Радість від появи пакета OpenVPN для мережевого сховища Synology швидко минула. Спроба налаштувати мережу для малого офісу, закінчилася практично не розпочавшись. В інтерфейсі для настройки пакета були відсутні всі принади цього самого пакета (доступна тільки авторизація за логіном і паролем).
 
Нещодавно натрапив на цю статтю: «Вчимо NAS Synology маршрутизировать трафік в OpenVPN тунель з аутентифікацією за сертифікатом» .
Начебто те, що треба. Але!
Як виявилося, навіть подібне втручання «руками» в надра прошивки не дозволяє піднімати з'єднання через TAP-інтерфейси.
Ну, що ж. Не зупинятися ж на половині шляху…
 
 

Суть проблеми

Якщо зробити все, як зазначено у статті, згаданої вище, тільки з типом адаптера TAP, то отримаємо наступний ефект:
 
1. Обираємо з'єднання VPN, натискаємо підключити.
2. В SSH сесії бачимо що тунель піднявся, сервер пінгуєтся, дані йдуть. Але інтерфейс Synology говорить нам що відбувається «Підключення».
3. Через 15-20 секунд інтерфейс ввічливо повідомляє, що підключиться не вдалося, і закриває працююче з'єднання.
 
Детальне вивчення того, що відбувається виявило, що у всіх скриптах пристрої, прописані алгоритми для визначення статусу OpenVPN з'єднання, грунтуючись на тому, що вони можуть бути тільки TUN.
 
Про це так само свідчать всі коментарі в скриптах.
 
 

Рішення проблеми

На момент написання статті на пристрої встановлена ​​прошивка DMS 5.0-4493 Update 1.
Відповідно, все описане тут актуально для неї .
 
Для зручності управління скриптами було вирішено зберігати все на адмінській мережевий кулі.
 
Створюємо на ній папку OpenVPN, в ній буде розташовуватися все необхідне для роботи клієнта:
 
1. Файл конфігурації OpenVPN «tap.conf»:
 
 
dev tap
proto udp  
remote ServerIP 444
client  
tls-client  
ns-cert-type server 
ca key/ca.crt  
cert key/Client1.crt  
key key/Client1.key  
comp-lzo yes 
tun-mtu 1500
tun-mtu-extra 32  
mssfix 1450
ping-restart 12  
ping 3
status log/openvpn-status.log  
log log/openvpn.log
script-security 2
float

 
2. Папка з сертифікатами: «key»
3. Папка з логами: «log»
4. Скрипти запуску / зупинки VPN.
 
Start.sh (запуск тунелю):
 
 
#!/bin/sh
CONF_DIR="/volume1/adm/OpenVPN/"
OPENVPN_CONF="tap.conf"
KERNEL_MODULES="x_tables.ko ip_tables.ko iptable_filter.ko nf_conntrack.ko nf_defrag_ipv4.ko nf_conntrack_ipv4.ko nf_nat.ko iptable_nat.ko ipt_REDIRECT.ko xt_multiport.ko xt_tcpudp.ko xt_state.ko ipt_MASQUERADE.ko tun.ko"
SERVICE="ovpnc"

# Make device if not present (not devfs)
if [ ! -c /dev/net/tun ]; then
  	# Make /dev/net directory if needed
  	if [ ! -d /dev/net ]; then
    		mkdir -m 755 /dev/net
  	fi
  	mknod /dev/net/tun c 10 200
fi

/usr/syno/bin/iptablestool --insmod $SERVICE ${KERNEL_MODULES}

echo "Starting openvpn client..."
/usr/sbin/openvpn --daemon --cd ${CONF_DIR} --config ${OPENVPN_CONF} --writepid /var/run/ovpn_client.pid

 
Stop.sh (зупинка тунелю):
 
 
#!/bin/sh

echo "Kill openvpn client..."
/bin/kill `cat /var/run/ovpn_client.pid` 2>/dev/null

 
OnLine.sh (перезапуск тунелю, якщо сервер не доступний):
 
 
#!/bin/sh

ping -c 3 10.23.122.1 
if [ $? -ne 0 ]; then
	echo "Stoping VPN.."
	sh Stop.sh
	echo "Sleep 5."
	sleep 5
	echo "Start...."
	sh Start.sh
fi

 
Загалом цього достатньо.
 
Як показали тести, VPN успішно перезапускається автоматично при відключенні інтернету або віддаленого сервера. Скрипт OnLine писався більше для автоматичного запуску VPN разом з NAS. Але штатний планувальник дозволяє додати виконання скрипта «щогодини», тому додав перевірку на доступність.
 
При такій реалізації прошивка NAS поняття не має про тунелі (воно й на краще), але при цьому всі ресурси віддаленої мережі доступні (мережеве резервування на IP з VPN прекрасно проходить).

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.