Beeline (Corbina) VPN - поднятие интернета под Gentoo

Материал из AlexNook
Перейти к навигацииПерейти к поиску

Материал полностью основан на топике пользователя nE0sIghT, который очень грамотно подошёл к решению этого вопроса и создал очень подробный и "рабочий" мануал. Однако, сюда вошло и немного из данной статьи, которую я писал ранее.

Важное замечание: в OnLime я пробыл недолго - пару месяцев или окло того. Грубая блокировка портов без возможности регулирования этого процесса мне не понравилась. Якобы это сделано для нашей безопастности, НО тот же билайн предлагает выбор между "блокировать такие-то порты или нет".

Причины модернизации настроек интернета

В принципе, можно пользоваться и тем подходом, который указан в этой статье, но по мимо явного косяка того мануала, заключающегося в постоянном создании нового интерфейся и потом его уничтожения, что загромождало бесконечно логи, после обновления OpenRC всплыла проблема с миграцией /var/run/ в /run/. Так же как плюс сам автор данного подхода приводит отсутствие необходимости в прописывании маршрутов - всё забирается автоматом. В принципе это так же очень хорошо, однако, в моём случае это не было большой проблемой.

Настройка параметров ядра

Linux Kernel Configuration: 3.1.6 kernel config
[*] Enable loadable module support  --->

Проверим, что всё включено верно:

zcat /proc/config.gz
File: /usr/src/linux/.config
CONFIG_PPP=y
CONFIG_PPP_MULTILINK=y
CONFIG_PPP_FILTER=y
CONFIG_PPP_ASYNC=y
CONFIG_PPP_SYNC_TTY=y
CONFIG_PPP_DEFLATE=y
CONFIG_PPP_BSDCOMP=y
CONFIG_PPP_MPPE=y
CONFIG_PPPOE=y
CONFIG_PPPOL2TP=y

Необходимые пакеты и параметры их компиляции

Для начала нужно поставить следующие пакеты в систему:

Use Flags: dnsretry -kernel (?)
Use Flags: dhcp ipv6 pam -activefilter -atm -eap -tls -gtk -radius (?)
Use Flags: client ipv6 server ssl -ldap -selinux -vim-syntax (?)
Use Flags: nls old-output -ldap -static (?)

Хочу обратить внимание на отсутствие флага kernel у net-dialup/xl2tpd. Хотя без него он и будет писать в логи, что нет поддержки ядром - с включённой данной поддержкой работоспособность исчезает из-за настроект ядра.

Так же у меня стояли пакеты в системе

но автор оригинальной инструкции их не упоминает, и я думаю они не нужны в общем-то.

Установка пакетов программ

Необходимо поправить файл /etc/portage/package.use, куда внести нужные флаги компиляции нашего софта. После чего выполнить как обычно emerge:

emerge net-misc/dhcp
emerge net-dialup/ppp
emerge sys-apps/net-tools
emerge net-dialup/xl2tpd


Конфигурационные файлы и службы, которые надо настроить

Для корректной работы интернета нам потребуются следующие конфигурационные файлы:

  • /etc/dhcp/dhclient.conf
  • /etc/dhcp/dhclient-exit-hooks
  • /etc/xl2tpd/xl2tpd.conf
  • /etc/ppp/options
  • /etc/ppp/options.xl2tp
  • /etc/ppp/chap-secrets
  • /etc/conf.d/net

Причём, если такого файла у вас нет изначально, то создайте его!

Начнём с настройки DHCP клиента

nano /etc/dhcp/dhclient.conf
File: /etc/dhcp/dhclient.conf
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
supersede dhcp-server-identifier 255.255.255.255;
request subnet-mask, broadcast-address, time-offset,
        routers, static-routes, domain-name, domain-name-servers,
        domain-search, interface-mtu, rfc3442-classless-static-routes;

timeout 40;
retry 30;


nano /etc/dhcp/dhclient-exit-hooks
File: /etc/dhcp/dhclient-exit-hooks
#!/bin/sh

RUN="yes"

if [ "$RUN" = "yes" ]; then
    if [ x"$new_rfc3442_classless_static_routes" != x"" ]; then
        if [ x"$reason" == x"BOUND" -o x"$reason" == x"REBOOT" ]; then
            rfc_routes=($new_rfc3442_classless_static_routes)

            for(( i=0; i < ${#rfc_routes[@]}; )); do
                net_length=${rfc_routes[$i]}
                ((i++))

                net_address=(0 0 0 0)
                for(( j=0; j < $[$net_length / 8 + ($net_length % 8 ? 1 : 0)]; j++, i++)); do
                    net_address[$j]=${rfc_routes[$i]}
                done

                gateway=(0 0 0 0)
                for (( j=0; j < 4; j++, i++ )); do
                    gateway[$j]=${rfc_routes[$i]}
                done

                old_IFS="$IFS"
                IFS='.'

                if [ -f /sbin/ip ]; then
                    /sbin/ip route replace "${net_address[*]}/$net_length" via "${gateway[*]}"
                elif [ -f /sbin/route ]; then
                    if [ x"$net_length" == x"32" ]; then
                        /sbin/route add -host "${net_address[*]}" gw "${gateway[*]}"
                    else
                        /sbin/route add -net "${net_address[*]}/$net_length" gw "${gateway[*]}"
                    fi
                fi
                IFS="$old_IFS"
            done
        fi
    fi
fi

Даём права на исполнение:

chmod a+x /etc/dhcp/dhclient-exit-hooks

Конфигурирование L2TP

nano /etc/xl2tpd/xl2tpd.conf
File: /etc/xl2tpd/xl2tpd.conf
[global]
access control = yes

[lac beeline]
lns = tp.internet.beeline.ru
name = VASH_LOGIN_V_BEELINE
redial = yes
redial timeout = 5
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tp
autodial = yes
flow bit = no
require chap = yes
require pap = no
refuse chap = no
refuse pap = yes
tx bps = 1000000000
Note: Не забудь-те под себя изменить VASH_LOGIN_V_BEELINE на ваш логин в Билайне


nano /etc/ppp/options
File: /etc/ppp/options
lcp-echo-failure 10
lcp-echo-adaptive
lcp-echo-interval 60


nano /etc/ppp/options.xl2tp
File: /etc/ppp/options.xl2tp
name VASH_LOGIN_V_BEELINE
remotename beeline
mru 1460
mtu 1460
noaccomp
nopcomp
novj
novjccomp
nobsdcomp
nodeflate
noipx
nomp
defaultroute
unit 0
Note: Не забудь-те под себя изменить VASH_LOGIN_V_BEELINE на ваш логин в Билайне. Так же важно обратить внимание на unit 0. Цифра 0 показывает, что используется ppp0, если у вас другой номер, то поменяйте на свой.


nano /etc/ppp/chap-secrets
File: /etc/ppp/chap-secrets
# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
VASH_LOGIN_V_BEELINE * VASH_PAROL_V_BEELINE *
Note: Не забудь-те под себя изменить VASH_LOGIN_V_BEELINE на ваш логин в Билайне, а VASH_PAROL_V_BEELINE на ваше пароль в билайне. В этой строке 4 параметра! Лоигн, сервер (звёздочка означает для всех), пароль и ip адрес.


Настройки сетевых интерфейсов - NET

nano /etc/conf.d/net
File: /etc/conf.d/net
#настройки моей домашней сети eth1
dns_domain_lo="homenetwork"
config_eth1="192.168.0.1 netmask 255.255.255.0"

#Настройки билайна
#Есть возможность заменить на openl2tpd и использовать его
L2TP_BACKEND="xl2tpd"
# Таймаут ожидания поднятия l2tp
L2TP_TIMEOUT=20

# Указываете интерфейс, через который будет подниматься vpn (он будет смотреть в локалку билайна). У меня eth0
# Если отличается от указанного - меняете здесь и ниже в 2х строках _eth0 на свой
DEPEND="eth0"

# Указываете интерфейс туннеля
# Если отличается от указанного - меняете здесь и ниже в 2х строках _ppp0 на свой
L2TP="ppp0"
ROUTES="
    195.14.50.0/27
    78.106.0.0/15
    224.0.0.0/4
"

#Поменять eth0 на нужный
config_eth0="dhclient"
#Поменять eth0 на нужный
dhclient_eth0="-nw"

#Поменять ppp0 на нужный
config_ppp0="null"
#Поменять ppp0 на нужный
depend_ppp0() {
    need net.${DEPEND}
}

check_module () {
    if ! [[ -f /proc/net/pppol2tp ]]; then
    ebegin "Loading l2tp module"
    # try both new and old module names
        modprobe l2tp_ppp 2>/dev/null || modprobe pppol2tp 2>/dev/null
    eend $?.
    fi
}

checkconfig() {
    if [ "${L2TP_BACKEND}" = "xl2tpd" ]; then
        if [[ ! -f /etc/xl2tpd/xl2tpd.conf ]] ; then
            eerror "Missing /etc/xl2tpd/xl2tpd.conf configuration file!"
            eerror "Example configuration file could be found in doc directory."
            return 1
        fi

        if [ ! -d /var/run/xl2tpd ] ; then
            checkpath -d -m 755 /var/run/xl2tpd
        fi
    fi

    return 0
}

preup() {
    if [ -z "${L2TP_BACKEND}" ]; then
        L2TP_BACKEND="xl2tpd"
    fi

    checkconfig || return 1

    if [ x"${IFACE}" = x"${L2TP}" ]; then
        if [ "${L2TP_BACKEND}" = "xl2tpd" ]; then
            start-stop-daemon --start --quiet --exec /usr/sbin/xl2tpd
        else
            check_module
            start-stop-daemon --start --quiet --exec /usr/sbin/openl2tpd
        fi

        iface_timer=0
        while [ $iface_timer -lt $L2TP_TIMEOUT ]; do
            if [ -n "$(ifconfig | grep ${IFACE})" ]; then
                eend 0
                return 0
            else
                if [ ${iface_timer} -eq 0 ]; then
                    einfo "Waiting for l2tp..."
                fi
                sleep 1
                ((iface_timer++))
            fi
        done

        cleanup_l2tp
        eend 1
        return 1
    fi

    return 0
}

postup() {
    if [ x"${IFACE}" = x"${L2TP}" ]; then
        gw=`route -n | awk "{ if (\\$1 == \"0.0.0.0\" && \\$8 == \"${DEPEND}\") print \\$2 }"`
        vpn=`ifconfig | grep -A1 ${IFACE} | grep -i p-t-p | awk '{ print $3 }' | sed  's/p-t-p://gi'`
        #vpn=`ifconfig | grep -A1 ${IFACE} | grep -i dest | awk '{ print $6 }'`

        route add ${vpn} gw ${gw}

        for i in ${ROUTES}; do
            route add -net ${i} gw ${gw}
        done
    fi
    return 0
}

predown() {
    if [ -z "${L2TP_BACKEND}" ]; then
        L2TP_BACKEND="xl2tpd"
    fi

    if [ x"${IFACE}" = x"${L2TP}" ]; then
        gw=`route -n | awk "{ if (\\$1 == \"0.0.0.0\" && \\$8 == \"${DEPEND}\") print \\$2 }"`
        vpn=`ifconfig | grep -A1 ${IFACE} | grep -i p-t-p | awk '{ print $3 }' | sed  's/p-t-p://gi'`

        cleanup_l2tp

        if [ -n ${gw} ]; then
            route del ${vpn} gw ${gw}

            for i in ${ROUTES}; do
                route del -net ${i} gw ${gw}
            done
        fi

    fi
    return 0
}

cleanup_l2tp() {
        if [ "${L2TP_BACKEND}" = "xl2tpd" ]; then
            start-stop-daemon --stop --quiet --pidfile /var/run/xl2tpd.pid

            if [ -n "$(pidof xl2tpd)" ]; then
                killall -9 xl2tpd > /dev/null 2>&1
            fi

            if [ -e /var/run/xl2tpd.pid ]; then
                rm -f /var/run/xl2tpd.pid
            fi
        else
            start-stop-daemon --stop --quiet --pidfile /var/run/openl2tpd.pid

            if [ -n "$(pidof openl2tpd)" ]; then
                killall -9 openl2tpd > /dev/null 2>&1
            fi

            if [ -e /var/run/openl2tpd.pid ]; then
                rm -f /var/run/openl2tpd.pid
            fi
        fi

        killall pppd > /dev/null 2>&1
        if [ -n "$(pidof pppd)" ]; then
            killall -9 pppd > /dev/null 2>&1
        fi
}


Note: Файл постарался, где возможно и нужно снабдить комментариями. Настройки моей домашней сети можно удалить, если у вас всё по другому.

Под себя нужно в конфиге изменить:

  • L2TP_BACKEND - имя используемого пакета для l2tp
  • DEPEND - имя сетевого интерфейса, который будет смотреть в локалку билайна и через который мы поднимем тунель
  • L2TP - название интерфейса тунеля
Note: Обратите внимание на опиции config_eth0, dhclient_eth0, config_ppp0, depend_ppp0() и поправить их в зависимости от значений тех переменных, которые указаны выше.

Замечание с маршрутами

По началу у меня вылезала ошибка схожая по описанию с вот этим. То есть устанавливается конект, проходится авторизация, всё вроде работает, НО интернета нет, а попутно отсылаются куда-то десятки гигабайт, а в качестве приёма значатся жалкие 40 или около того килобайт. Как я понял это проблема маршрутизации. После чего попался на глаза вот это сообщение. В последней версии sys-apps/net-tools имеет другой вывод ifconfig. У меня стояла старая версия этого программного продукта, соответственно в файле найстроек сети мне пришлось обратить внимание на данные 2 строчки:

File: /etc/conf.d/net
        vpn=`ifconfig | grep -A1 ${IFACE} | grep -i p-t-p | awk '{ print $3 }' | sed  's/p-t-p://gi'`
        #vpn=`ifconfig | grep -A1 ${IFACE} | grep -i dest | awk '{ print $6 }'`

Первая работает со старой версией программы, а вторая с новой. Соответственно я поступил следующим образом - обновил sys-apps/net-tools, но с использованием фллага old-output, что позволило маршрутам прописаться верно.

Note: тем у кого стоит новая версия программы, но без опции old-output нужно закомментировать первую строчку в /etc/conf.d/net и раскомментировать вторую.

Проверка настроек и работоспособности

Чуть ниже приведу команды и их вывод в рабочей ситуации:

equery f net-dialup/xl2tpd
File: equery f net-dialup/xl2tpd | grep init.d
/etc/init.d
/etc/init.d/xl2tpd


route -n
File: route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         78.107.1.253    0.0.0.0         UG    0      0        0 ppp0
0.0.0.0         10.134.40.1     0.0.0.0         UG    2      0        0 eth0
10.134.40.0     0.0.0.0         255.255.248.0   U     0      0        0 eth0
78.106.0.0      10.134.40.1     255.254.0.0     UG    0      0        0 eth0
78.107.1.253    10.134.40.1     255.255.255.255 UGH   0      0        0 eth0
78.107.1.253    0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
127.0.0.0       127.0.0.1       255.0.0.0       UG    0      0        0 lo
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
195.14.50.0     10.134.40.1     255.255.255.224 UG    0      0        0 eth0
224.0.0.0       10.134.40.1     240.0.0.0       UG    0      0        0 eth0


ifconfig
File: ifconfig
eth0      Link encap:Ethernet  HWaddr 00:22:15:64:00:4f
          inet addr:10.XXX.XX.XXX  Bcast:10.134.47.255  Mask:255.255.248.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4722895 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4220628 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1301575310 (1.2 GiB)  TX bytes:3009947951 (2.8 GiB)
          Interrupt:18

eth1      Link encap:Ethernet  HWaddr 00:22:15:63:eb:fd
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1013353 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1095580 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:180899060 (172.5 MiB)  TX bytes:1489050408 (1.3 GiB)
          Interrupt:17

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:571251 errors:0 dropped:0 overruns:0 frame:0
          TX packets:571251 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:75043993 (71.5 MiB)  TX bytes:75043993 (71.5 MiB)

ppp0      Link encap:Point-to-Point Protocol
          inet addr:78.107.XXX.XX  P-t-P:78.107.1.253  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1460  Metric:1
          RX packets:3981149 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4153990 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:991917926 (945.9 MiB)  TX bytes:2773901467 (2.5 GiB)
rc-status
File: rc-status
net.eth0		[  started  ]
net.ppp0		[  started  ]
net.eth1		[  started  ]
dhcpd			[  started  ]
/var/log/messages
File: /var/log/messages