Подключение к провайдеру используя 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() { 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:"логин" * "пароль"
- Создайте скрипты для добавления и удаления маршрутов к L2TP серверу
/etc/ppp/ip-up.d/addroute#!/bin/sh . /etc/functions.sh . /lib/network/config.sh GW="$(uci_get_state network wan gateway)" WAN="$(uci_get_state network wan ifname)" route add $PPP_REMOTE gw $GW dev $WAN route del $PPP_REMOTE dev $PPP_IFACE
/etc/ppp/ip-down.d/delroute#!/bin/sh route del $PPP_REMOTE
- Дайте права для исполнения этих скриптов:
chmod 755 /etc/ppp/ip-up.d/addroute chmod 755 /etc/ppp/ip-down.d/delroute
- Добавьте строку 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, чтобы периодически его запускать.
ru/doc/howto/connect_by_l2tp.txt · Last modified: 2012/11/06 19:07 by glfokin
This text is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
