Show pagesourceOld revisionsBacklinksBack to top × Table of Contents Подключение к провайдеру используя L2TP с Dual Access Подготовка Необходимые пакеты Установка Настройка Поддержание соединения Подключение к провайдеру используя L2TP с Dual Access Многие провайдеры России, Украины, Израиля и других стран предоставляют подключение с использованием Layer 2 Tunneling Protocol. Во многих случаях провайдер предоставляет “локальную” сеть, где находятся внутренние ресурсы провайдера (FTP, форумы и т.д.). Кроме того, пользователи могут обмениваться файлами через “локальную” сеть с помощью P2P-программ, например Direct Connect. Трафик в “локальной” сети бесплатен и (или) не ограничена скорость. Это и называется Dual Access. Единственный пакет OpenWrt, который использует ядро для передачи L2TP трафика это openl2tp. Данное руководство поможет настроить OpenWrt для подключения к провайдеру с помощью этого пакета. Подготовка Необходимые пакеты openl2tp-full Установка opkg install openl2tp-full Настройка Создайте скрипт openl2tpd в /etc/init.d/#!/bin/sh /etc/rc.common START=90 STOP=10 USER='login' # Next line L2TP server domain name or IP L2TPSERVER='' L2TP='openl2tpd' OPTS='-u 1701' CONF='l2tpconfig' RPC='portmap' MOD='pppol2tp' export L2TP_HISTFILE='/dev/null' start() { if [ ! -f /tmp/non-first_connect ] then touch /tmp/non-first_connect LOCAL_GW=`route -n | grep '^0.0.0.0' | awk '{print $2}'` # adding routes to l2tp servers nslookup $L2TPSERVER | grep -A100 -F 'Name: ' | \ grep -v Name | awk '{print $3}' | while read address do /sbin/route add $address gw $LOCAL_GW dev `uci get network.wan.ifname` done # adding routes to provider's local dns servers cat /var/resolv.conf.auto | grep -A100 'Interface wan' | \ grep nameserver | awk '{print $2}' | while read address do /sbin/route add $address gw $LOCAL_GW dev `uci get network.wan.ifname` done fi echo -n "Checking for $L2TP... " L2TP_PROG=`which $L2TP` if [ -n "$L2TP_PROG" ] && [ -x $L2TP_PROG ]; then echo "yes" else echo "no" return 1 fi echo -n "Checking for $CONF... " CONF_PROG=`which $CONF` if [ -n "$CONF_PROG" ] && [ -x $CONF_PROG ]; then echo "yes" else echo "no" return 1 fi if ! pidof $RPC 1> /dev/null 2> /dev/null; then echo -n "Starting $RPC... " RPC_PROG=`which $RPC` if [ -n "$RPC_PROG" ] && [ -x $RPC_PROG ] && start-stop-daemon -q -S -x $RPC_PROG; then echo "done" else echo "failed" return 1 fi fi echo -n "Checking WAN status..." while [ -z "$(uci_get_state network wan up)" ] ; do sleep 1 done echo "done" echo -n "Starting $L2TP... " if ! start-stop-daemon -q -S -x $L2TP_PROG -- $OPTS; then start-stop-daemon -q -K -x $L2TP_PROG fi echo "done" echo -n "Establishing tunnel... " ( echo "peer profile modify profile_name=default lac_lns=lac" echo "ppp profile modify profile_name=default mtu=1460 auth_pap=no auth_eap=no default_route=yes auth_none=no lcp_echo_interval=10" echo "tunnel create tunnel_name=corbina dest_ipaddr=$L2TPSERVER framing_caps=sync" echo "quit" ) | $CONF_PROG 1> /dev/null 2> /dev/null if [ $? -ne 0 ]; then echo "failed" rm -f /var/run/$L2TP.pid return 1 fi ( echo "session create tunnel_name=corbina session_name=corbina user_name=$USER" echo "quit" ) | $CONF_PROG 1> /dev/null 2> /dev/null if [ $? -ne 0 ]; then echo "failed" rm -f /var/run/$L2TP.pid return 1 fi echo "done" } stop() { echo -n "Checking for $L2TP... " L2TP_PROG=`which $L2TP` if [ -n "$L2TP_PROG" ] && [ -x $L2TP_PROG ]; then echo "yes" else echo "no" return 1 fi echo -n "Checking for $CONF... " CONF_PROG=`which $CONF` if [ -n "$CONF_PROG" ] && [ -x $CONF_PROG ]; then echo "yes" else echo "no" return 1 fi echo -n "Deleting tunnel... " ( echo "session delete tunnel_name=corbina session_name=corbina" echo "quit" ) | $CONF_PROG 1> /dev/null 2> /dev/null if [ $? -ne 0 ]; then echo "failed" else ( echo "tunnel delete tunnel_name=corbina" echo "quit" ) | $CONF_PROG 1> /dev/null 2> /dev/null if [ $? -ne 0 ]; then echo "failed" else echo "done" fi fi echo -n "Stopping $L2TP... " if ! start-stop-daemon -q -K -x $L2TP_PROG; then echo "not running" return 1 else rm -f /var/run/$L2TP.pid echo "done" fi } restart() { stop sleep 10 start } Скрипт содержит много отладочной информации, которая может быть удалена. Вставьте ваши логин и доменное имя или IP-адрес сервера в этот скрипт. Дайте права для исполнения скрипта:chmod 755 /etc/init.d/openl2tpd Введите логин и пароль в /etc/ppp/chap-secrets:"логин" * "пароль" Добавьте строку replacedefaultroute и ipparam vpn в /etc/ppp/options. (ipparam не требуется для trunk). Создайте новый интерфейс в /etc/config/network... config 'interface' 'vpn' option 'ifname' 'ppp0' option 'proto' 'none' ... Добавьте reqopts в раздел wan в /etc/config/network (опция msstaticroutes работает только в trunk).option reqopts 'staticroutes msstaticroutes' Они нужны, чтобы получить статические маршруты от провайдера. Какие reqopts выбрать, зависит от провайдера. Они означают, какие опции DHCP использовать. * “staticroutes” = option 121 * “msstaticroutes” = option 249 * “routes” = option 33 (Это еще не реализовано в default.script, смотрите Ticket 10294). Добавьте vpn интерфейс в зону wan в /etc/config/firewall:option network 'wan vpn' Теперь, после перезагрузки вы можете запустить openl2tp./etc/init.d/openl2tpd start Для запуска openl2tp при загрузке/etc/init.d/openl2tpd enable Поддержание соединения Опция поддержания в pppd не всегда работает правильно. Именно поэтому я сделал скрипт keepalivel2tp для преподключения. /etc/ppp/keepalivel2tp #!/bin/sh if [ ! -f /var/run/openl2tpd.pid ]; then while [ ! -f /var/run/ppp0.pid ]; do { /etc/init.d/openl2tpd restart sleep 60 } done fi Для использования этого скрипта вы должны дать права для его исполнения и настроить cron, чтобы периодически его запускать. This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.OKMore information about cookies Last modified: 2018/09/16 07:53by bobafetthotmail