OpenWRT Chaos Calmer 15.05.1

LESHIY-ODESSA edited this page Aug 15, 2018 · 27 revisions

Простая настройка 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 vpn.zaborona.help
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 введите 8.8.8.8

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

Скрипт запускается при загрузке, устанавливает необходимые пакеты, сохраняет во временную папку бинарник и либы 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: vpn.zaborona.help
  • 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 'vpn.zaborona.help'
	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
Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.