OpenWRT Chaos Calmer 15.05.1 - zhovner/zaborona_help GitHub Wiki

Простая настройка Zaborona на роутерах с OpenWRT и 4мб памяти.

(роутеры с 8мб и больше конечно тоже поддерживаются :)
Суть инструкции - засунуть в роутер загрузочный скрипт, который сделает за вас всю работу. Скрипт является творческой переработкой предыдущих инструкций.
Не нужно пересобирать прошивку, не нужно даже заходить в консоль :)
Протестировано на tp-link 741 и 841 с разными провайдерами.

Залогиньтесь в веб-интерфейс.
Зайдите в System -> Startup, прокрутите страницу вниз,
Вставьте следующий скрипт в окно Local Startup:

#!/bin/sh
# ------------- FOR ROUTERS RUNNING OPEN-WRT --------------------
# SCRIPT WILL DOWNLOAD OPENVPN ON THE ROUTER AND RUN IT
# Openvpn configuration file inserted in this script body.

# USE SCRIPT ON ROUTERS WITH SMALL ROM (4 MB)
# OpenVPN package will be deployed in the
# /tmp folder (which is placed in the RAM).
# Folder will be erased every reboot, that's why you need:

# MAKING SCRIPT TO RUN ON EVERY ROUTER STARTUP:
# Log into the web interface,
# go to "System" -> "Startup", scroll the page down,
# put this script into "Local Startup" textarea,
# and press "Submit" button. Then reboot the router.

# TESTED WITH OpenWRT CHAOS CALMER 15.05 on:
# - tp-link tl-wr841nd
# - tp-link tl-wr741n
# - ...
# in static wan and pppoe wan mode.

TEMPPATH=/tmp/openvpn
CONFIG_PATH=${TEMPPATH}/config.ovpn
IFUP=${TEMPPATH}/ifup.sh
IFDOWN=${TEMPPATH}/ifdown.sh
Z="ZABORONA"  # Log prefix

#--------------------- GET ALL PACKAGES -----------------------------
echo "$Z: This script will download and run OpenVPN...";
while ! ping -c 4 -q downloads.openwrt.org ; do
    echo "$Z: Sleep 3 sec and repeat...";
    sleep 3;
done

echo "$Z: Creating ${TEMPPATH} folder.";
mkdir ${TEMPPATH}; cd ${TEMPPATH};

echo "$Z: Updating packets sources:";
opkg update || exit 1;

echo "$Z: Installing: kmod-tun zlib liblzo";
# opkg will skip installation, if package is already installed
opkg install kmod-tun zlib liblzo

echo "$Z: Downloading in RAM (${TEMPPATH}): libopenssl openvpn-openssl";
opkg download libopenssl openvpn-openssl ;

echo "$Z: Unpacking...";
for archive in $(ls); do
    if [ -f ${archive} ]; then  # -f to skip directories
        tar xzf ${archive}; tar xzf data.tar.gz;
        # remove unnecessary files (all necessary is in 'usr' folder)
        rm -f ${archive} debian-binary control.tar.gz data.tar.gz;
        rm -rf etc lib
    fi
done

#------------------ EXPORT PATH, CONFIG, IFUP, IFDOWN scripts ---------------------
echo "$Z: updating \$PATH";
export PATH=$PATH:${TEMPPATH}/usr/sbin
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${TEMPPATH}/usr/lib
echo "$Z: exporting openvpn config into ${CONFIG_PATH}"
# put your openvpn client|server config (including keys) below:
cat <<EOF > ${CONFIG_PATH}
nobind
client
remote srv0.vpn.zaboronahelp.pp.ua 1196
remote-cert-tls server
cipher AES-128-CBC
setenv opt ncp-ciphers AES-128-GCM
setenv opt block-outside-dns
dev tun
proto tcp

<ca>
-----BEGIN CERTIFICATE-----
MIIDOzCCAiOgAwIBAgIJAOZ+WWiLZjjVMA0GCSqGSIb3DQEBCwUAMBgxFjAUBgNV
BAMMDVphYm9yb25hLmhlbHAwHhcNMTcwNTE5MTk0MzI3WhcNMjcwNTE3MTk0MzI3
WjAYMRYwFAYDVQQDDA1aYWJvcm9uYS5oZWxwMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEA4BufraaBWWD5M8h7vt+4wGw/7OHeKOqZN4hS/OmqfwOIEJV3
5OWtzLmL5OpT5kIZ+NetF3ooc2pWRSZ+642IlzjIC2GqT/V5p/VXKjZsAZXQaaVo
OuWXlVmJFpR9nO3PIDn4wQvhQPPnJIYQgCl/vMV7TE9ZkpziEBAY9v3chwXHJ8+w
DyXkFn/BIMBdDamz+K7ffH17CM4aLr59W9AKc/DVox9ogdXmiVwCXag6byENZZEz
1LgpU+YtH/GnVyLSsaXC/fZQ12/NMjI/XXIM6x02pR/F4faOCLHHdYaWp3XJTQPj
vdPp7ve/8qWNijdkRma7y8TbmRYEut/JbiLFyQIDAQABo4GHMIGEMB0GA1UdDgQW
BBR7+jwpIvjCvbSi5cDxbig/UkYIuDBIBgNVHSMEQTA/gBR7+jwpIvjCvbSi5cDx
big/UkYIuKEcpBowGDEWMBQGA1UEAwwNWmFib3JvbmEuaGVscIIJAOZ+WWiLZjjV
MAwGA1UdEwQFMAMBAf8wCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBCwUAA4IBAQCA
HG//Q5HrOuucEdqQqmxUhyXp+wZgcHMkDmqaXD2kgbhaa6L7M68yGryDsHFh+pZ6
1ePabk7kmvJnYWEY7veQzWJgBNfHBja+2wTEOEQTJW0DCeJw9QUpajrBcrRQz5DJ
BGrXcKAWZvqYjgp3fIDGtxZh0KCaJrPT2jmj3qM+aq8LEhM2mlqpvLVq6FLvUYiU
/iTdNpVL6Xdd16839G1VatvnZlCoGTc/6iBwbs9+xt7BkCVdY2gb3egB833gAxwv
DMwC41oj8XJlY2N5ieqhINYCtNOa+9REoJP9fycoNMpcejbF/UeEdZtpCfRHAE7h
BvStsSqP1Gl9ZeCtmntI
-----END CERTIFICATE-----
</ca>

<cert>
-----BEGIN CERTIFICATE-----
MIIDWzCCAkOgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1aYWJv
cm9uYS5oZWxwMB4XDTE3MDUxOTE5NDQxMloXDTI3MDUxNzE5NDQxMlowETEPMA0G
A1UEAwwGcHVibGljMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0RMM
ZHEgUmH5Mve+lOPrAIVfbmLNP+93J3Gymtga4pu/ia44/+7hQiE01ad13RuoiplI
1KyQAaHUiYh2YKX6K+ZTQwHWYXBXVsbmQVjqftSOlakWSWW0gZq9qV8Dbxa1hP51
KTdj8fPk2jfiv/D2N60FaqSg/pL4+Xjjo2ogBLvHujnNebOaZ2VJFQT1chEpT9ch
/H0GWMS3qK6vBEnXBcxio8DxfyRMarwbzFfSM4prv4VE7BfgJ+5Fm2IEsLtWKAM1
kH+1rPXaBlZbDj4ozlV4gYD1rJYXL3ngzMj5/Tymt3Oj/RVsM1fl25JaA9hQSr0r
Y/2Qb3PuuuQiUkk64wIDAQABo4G2MIGzMAkGA1UdEwQCMAAwHQYDVR0OBBYEFBHa
Ph6sI0eq0z6O+E2KFdLA2fPnMEgGA1UdIwRBMD+AFHv6PCki+MK9tKLlwPFuKD9S
Rgi4oRykGjAYMRYwFAYDVQQDDA1aYWJvcm9uYS5oZWxwggkA5n5ZaItmONUwHQYD
VR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMRMAsGA1UdDwQEAwIHgDARBgNVHREE
CjAIggZwdWJsaWMwDQYJKoZIhvcNAQELBQADggEBAFWlN/iFntyrXC6GA/VY9sWF
aah7FUTZ7axd/qL70x+s62VcohddX4qFdETdeAPPva7Z60lKQdXwjXynJ/DiLiS5
UoALMD1bSzDBqA69GrSDTMsYvVU3QvNmUgBvPHjXqqj9ZT287KxYzRPWNY9m8IBA
4T8Q3zJFOtKZH0gijoMUWI10fnwU1olkt5d28ldRC2EYuE+Gdm8jAZDvfQ4XwkvD
CfG+gSIJ8Gg1VfsaX2qKgoBNW5or6RSxdBKCiVgLL3GSITlkrrN0O7VvT8C/qDJs
pk/mgRCDARL8jLwtaRV0xrDAnSPyuctRpHc6BFJzDKerX7ABCgOOcTUAr8SbbSc=
-----END CERTIFICATE-----
</cert>

<key>
-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDREwxkcSBSYfky
976U4+sAhV9uYs0/73cncbKa2Brim7+Jrjj/7uFCITTVp3XdG6iKmUjUrJABodSJ
iHZgpfor5lNDAdZhcFdWxuZBWOp+1I6VqRZJZbSBmr2pXwNvFrWE/nUpN2Px8+Ta
N+K/8PY3rQVqpKD+kvj5eOOjaiAEu8e6Oc15s5pnZUkVBPVyESlP1yH8fQZYxLeo
rq8ESdcFzGKjwPF/JExqvBvMV9Izimu/hUTsF+An7kWbYgSwu1YoAzWQf7Ws9doG
VlsOPijOVXiBgPWslhcveeDMyPn9PKa3c6P9FWwzV+XbkloD2FBKvStj/ZBvc+66
5CJSSTrjAgMBAAECggEBAJBE6603ns0aTCJOcFU/fP8sCXEbfnRa4sb2Hv/YlZy/
SolQDocUqJ3AWjwARUWg+0lAgtA2j1yA9i89WipQ/fNjCRtY3jz4j1wS/fojyBRi
yk0dk4JsSwWP6MZCCRWT/wfZqrEZRr9DxCyMmcxHEy/SFcXD+lAQzPsg3zv5VETO
q67S2s/njkSWyA9woRJLztld/Az/Rgh5VP2TxDCIHb0dTE6648lIUO0VkVfg8+G4
3BLXXA86YCFmRdTfs6rywf9jPN6V1gnyICk198/2Ne+jM3kNxNMn8jBDbjTkxT1b
ovBKDDpNNuLbBTjtlxEm3Q1CPuAH+0L8nfb9ZtSoISkCgYEA6rvgqTwAX272LXZi
jJuE6tJtOB47tih8HRgzQbCLPRduwz7P7ObtUSD88fSYsKCEb3T3kiUeMVADbWnR
DLqUetcDUAjPe0l/KcR0pef0mVvP1CnsTY+i9yGAOMkfrLqIBrLRd+8KRs85DHYm
/NYDHptDdGHjBW8Olc4L6+Wq/4cCgYEA5AQOlD9oWQuvrWhX1K1sK0JQxu36phrD
w5JuS5TJKyWxzABkgHJx8ZVIOhNUtXLSAkVQlaM5hKj/gVgf+DZsKaIcxWT7xLZZ
Qdiz3bRFtigxyZD67oRvzxBWg5XBnrgieM/C5+EiNQ3iRDjbvL228+cDIYPpwwtD
7/hHA15uqMUCgYEAgEZngVQeyAg1U6bMOBaMzl5r/SzYaLU7DhM5f35guOPjTaM3
sTiJG7qxP+/wuSUe+mGrIRxToZMeLF6VNSWJGpABaW1HJRKHAWYwcLGPg3ce3cyD
K+eAoRiXn3CZdKUCzNZPjgD9VrDLdjnjGGxDjChA9oq/qyqDh+3vqdv6VGUCgYBX
qIOeVJ4eFZMNPF7/wUgjfVQmlhjVQNbf2eyTG/kWoGAxCDma8+SANp7UzNe1BhZc
jx9C18RmDr5jkGiB+RIuE0eyT3dHEb9QxCmp4wMl22AAmL8PcVS2qxZHcgxEo4+F
GIJauL943ASPq7g2YEz0iWw3t0noFO2iVLWgQu6R7QKBgQCp9SedsiPJXQADFVln
7j5yLj7qBdATuZHbqfCt4CI7GO+5kjtNqFdZAZphP+gFJe49srS17WPLEFYpQpix
T77eOw4U3iIgoJoxn545CkMdH4H0lsQhfBOTqFJ8rdAzLTAa4pzgAOvLMsZWxM32
c+bjFxzMVzfVFOx30yZN8YbX6Q==
-----END PRIVATE KEY-----
</key>
EOF

echo "$Z: exporting ${IFUP}";
cat <<EOF > ${IFUP}
#!/bin/sh
IFACE=\$1; IP=\$4;
iptables -t nat -A POSTROUTING -o \$IFACE -j SNAT --to-source \$IP
iptables -I INPUT -i \$IFACE -j ACCEPT
iptables -I FORWARD -i \$IFACE -j ACCEPT
iptables -I OUTPUT -o \$IFACE -j ACCEPT
iptables -I FORWARD -o \$IFACE -j ACCEPT
EOF
chmod +x ${IFUP};

echo "$Z: exporting ${IFDOWN}";
cat <<EOF > ${IFDOWN}
#!/bin/sh
IFACE=\$1; IP=\$4;
iptables -t nat -D POSTROUTING -o \$IFACE -j SNAT --to-source \$IP
iptables -D INPUT -i \$IFACE -j ACCEPT
iptables -D FORWARD -i \$IFACE -j ACCEPT
iptables -D OUTPUT -o \$IFACE -j ACCEPT
iptables -D FORWARD -o \$IFACE -j ACCEPT
EOF
chmod +x ${IFDOWN};

#----------------------- START DAEMON -------------------------------
echo "$Z: openvpn --daemon --config ${CONFIG_PATH}";
openvpn --config ${CONFIG_PATH} --daemon --script-security 2 --up ${IFUP} --down ${IFDOWN}

exit 0

Нажмите Submit.

Также необходимо настроить роутер на использование DNS сервера 8.8.8.8 а не того, который выдает провайдер.
Для этого зайдите в Network -> Interfaces -> WAN -> Edit -> Advanced Settings
уберите галочку Use DNS servers advertised by peer и в появившемся поле ввода Use custom DNS servers введите 208.67.222.222 и 208.67.220.220

Перезагрузите роутер и наслаждайтесь котиками.

Скрипт запускается при загрузке, устанавливает необходимые пакеты, сохраняет во временную папку бинарник и либы OpenVPN, экспортирует конфиг клиента Zaborona и скрипты для настройки фаерволла.

После этого запускается OpenVPN, который поднимает соединение с Zaborona. Если интернет надолго пропадает то OpenVPN после пересоединения перенастраивает правила фаерволла для нового IP через if-down..if-up скрипты.

P.S.
Настройка DNS нужна так как некоторые провайдеры подменяют dns ответы для заблокированных ресурсов. OpenVPN 2.4.2 делает это автоматически, (выполняя команды из конфига Zaborona) но в репозиториях OpenWRT версия openvpn 2.3.6 которая так не умеет.

Zhovner советует устанавливать openvpn 2.4.2 из репозитория LEDE, но тогда нужно определять версию платформы, и составлять url нужного пакета под эту платформу (или держать таблицу url для пакетов под разные платформы), а скрипт и так уже слишком разбух. Может допилю позже.


Другие инструкции:

Если у Вас роутер с 4mb памяти, то установить получится только так: https://habrahabr.ru/post/211174/, или так: https://tokyobreeze.wordpress.com/2015/01/15/install-openvpn-in-a-router-with-4mb-flash/, или пересобрав прошивку с удалением ненужных пакетов.


Для роутеров с 4мб памяти есть отличное решение - openvpn-mbedtls, который доступен для прошивки LEDE. Для сравнения, размер libopenssl - 687kb, a libmbedtls - 157kb.
Установить не выйдет, а засунуть в образ с прошивкой, без вырезания чего-либо полезного - вполне. Все таки 350кб впихнуть в прошивку проще, чем 850.
Можно воспользоваться ImageBuilder, он позволяет пересобрать файл прошивки без необходимости компиляции.
Неплохая инструкция здесь: https://autohome.org.ua/12-openwrt/36-openwrt-imagebuilder
Для lede процес аналогичен, только качается все из ее репозитория.
Также нужна 64-х битная linux система. у меня в virtualbox все отлично собирается.
Для своего 740n, дабы освободить побольше места, я убрал такие пакеты:
ppp
ppp-mod-ppoe
kmod-ppp
kmod-ppoe
kmod-ppox
И добавил такие:
luci-app-openvpn
openvpn-mbedtls
libmbedtls
liblzo
kmod-tun


Для установки необходимо ~900kb свободного места в памяти роутера.

На данный момент для OpenWRT доступная версия openvpn - 2.3.6. Поэтому желательно установить прошивку LEDE, для которой есть версия 2.4.2. LEDE является обновленной версией OpenWRT и процес настройки ничем не отличается.

Либо можно через консоль установить пакет openvpn-2.4.2 на OpenWRT из репозитория LEDE: https://downloads.lede-project.org/releases/packages-17.01/
Адрес пакета разный для разных платформ. Пример команды для платформы ar71xx:

opkg --force-depends install https://downloads.lede-project.org/releases/packages-17.01/mips_24kc/base/openvpn-openssl_2.4.2-1_mips_24kc.ipk

Настройка через LuCI

  1. заходим в LuCI, переходим в System->Software
  2. устанавливаем два пакета luci-app-openvpn и openvpn-openssl
  3. обновляем страницу, переходим в Services->OpenVPN
  4. добавляем новую конфигурацию Client configuration for an ethernet bridge VPN с любым названием и жмем Edit, остальные можно удалить
  5. нажимаем Switch to advanced configuration
  6. ставим галочки, либо прописываем значения. если нужного пункта нет, добавляем через выпадающий список внизу страницы.

вкладка Service:

  • setenv: opt ncp-ciphers AES-128-GCM opt block-outside-dns

вкладка Networking:

  • nobind
  • dev: tun0

вкладка VPN:

  • client
  • remote: srv0.vpn.zaboronahelp.pp.ua 1196
  • remote_random
  • proto: tcp

вкладка Cryptography:

  • cipher: AES-128-CBC
  • ca, cert и key: выбрать соответствующие файлы, которые можно скачать здесь: https://zaborona.help/extra.html
  • remote_cert_tls: server
  1. жмем Save & Apply
  2. переходим в Network->Interfaces
  3. жмем Add new interface, далее по списку:
  • Name of the new interface: пишем имя интерфейса
  • Protocol of the new interface: Unmanaged
  • Create a bridge over multiple interfaces: не ставим
  • Cover the following interface: Custom Interface: tun0 (или выбираем tun0 если есть в списке)
  1. Submit
  2. вкладка Advanced Settings:
  • Bring up on boot

вкладка Firewall Settings:

  • выбираем WAN
  1. Save & Apply
  2. переходим в System->Startup
  3. ищем в списке openvpn, рядом должна быть кнопка Enabled. Если кнопка Disabled, жмем ее, повторяем с п.13.
  4. переходим в Services->OpenVPN
  5. напротив созданной конфигурации ставим галочку Enabled
  6. Save & Apply
  7. напротив созданной конфигурации жмем Start

После проделанных действий OpenVPN будет автоматически запускаться и подключаться при включении роутера.

Для того чтобы не мучатся поиском этих меню можно отредактировать файл конфигурации вручную - /etc/config/openvpn добавив в него следующий код :

config openvpn 'OpenVPN_zaborona_help'

	option client '1'
	option reneg_sec '0'
	option verb '3'
	option nobind '1'
	option remote_cert_tls 'server'
	# list setenv 'opt ncp-ciphers AES-128-GCM' # Можно удалить.
	# list setenv 'opt block-outside-dns' # Параметр для Windows клиентов, можно удалить
	option dev 'tun0'
	list remote 'srv0.vpn.zaboronahelp.pp.ua 1196'
	option remote_random '1'
	option proto 'tcp'
	option cipher 'AES-128-CBC'
	option ca '/etc/config/ca.crt'
	option cert '/etc/config/zaborona-help.crt'
	option key '/etc/config/zaborona-help.key'
	option enabled '1'
	option tun_ipv6 '1'

Начиная с версии OpenVPN 2.4 (OpenWRT не ниже 17.xx, у Chaos Calmer — OpenVPN 2.3.6-5) можно отключить получение IPv6.

uci set openvpn.OpenVPN_zaborona_help.tun_ipv6='0'
uci set openvpn.OpenVPN_zaborona_help.pull_filter='ignore ifconfig-ipv6'
uci add_list openvpn.OpenVPN_zaborona_help.pull_filter='ignore route-ipv6'
uci commit openvpn

Настройка через командную строку

Описание настройки OpenWRT 15.05.1 через командную строку - у меня как раз такая. Tp-Link TL-WR842ND. Я установил пакет openvpn-openssl и прописал в командной строке

openvpn --config /root/zaborona-help.ovpn

подключился с другого терминала и попробовал попинговать ВК - все получилось

далее я внес изменения в файл /etc/rc.local

он у меня стал такого содержания.

openvpn --config /root/zaborona-help.ovpn &
/etc/iptables.up.rules &
exit 0

А для того чтобы я мог через NAT использовать этот тунель, я прописал правила /etc/iptables.up.rules

#!/bin/sh

sleep 15

IP=$(ifconfig tun0| sed -n '2 {s/^.*inet addr:\([0-9.]*\) .*/\1/;p}')

iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source $IP

iptables -I INPUT -i tun0 -j ACCEPT

iptables -I FORWARD -i tun0 -j ACCEPT

iptables -I OUTPUT -o tun0 -j ACCEPT

iptables -I FORWARD -o tun0 -j ACCEPT
⚠️ **GitHub.com Fallback** ⚠️