Beeline (Corbina) VPN - поднятие интернета под Gentoo
Материал полностью основан на топике пользователя nE0sIghT, который очень грамотно подошёл к решению этого вопроса и создал очень подробный и "рабочий" мануал. Однако, сюда вошло и немного из данной статьи, которую я писал ранее.
Важное замечание: в OnLime я пробыл недолго - пару месяцев или окло того. Грубая блокировка портов без возможности регулирования этого процесса мне не понравилась. Якобы это сделано для нашей безопастности, НО тот же билайн предлагает выбор между "блокировать такие-то порты или нет".
Причины модернизации настроек интернета
В принципе, можно пользоваться и тем подходом, который указан в этой статье, но по мимо явного косяка того мануала, заключающегося в постоянном создании нового интерфейся и потом его уничтожения, что загромождало бесконечно логи, после обновления OpenRC всплыла проблема с миграцией /var/run/ в /run/. Так же как плюс сам автор данного подхода приводит отсутствие необходимости в прописывании маршрутов - всё забирается автоматом. В принципе это так же очень хорошо, однако, в моём случае это не было большой проблемой.
Настройка параметров ядра
Linux Kernel Configuration: 3.1.6 kernel config |
[*] Enable loadable module support ---> |
Проверим, что всё включено верно:
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:
Конфигурационные файлы и службы, которые надо настроить
Для корректной работы интернета нам потребуются следующие конфигурационные файлы:
- /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 клиента
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;
#!/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
Даём права на исполнение:
Конфигурирование L2TP
[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
lcp-echo-failure 10
lcp-echo-adaptive
lcp-echo-interval 60
name VASH_LOGIN_V_BEELINE
remotename beeline
mru 1460
mtu 1460
noaccomp
nopcomp
novj
novjccomp
nobsdcomp
nodeflate
noipx
nomp
defaultroute
unit 0
# Secrets for authentication using CHAP
# client server secret IP addresses
VASH_LOGIN_V_BEELINE * VASH_PAROL_V_BEELINE *
Настройки сетевых интерфейсов - 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
}
Под себя нужно в конфиге изменить:
- L2TP_BACKEND - имя используемого пакета для l2tp
- DEPEND - имя сетевого интерфейса, который будет смотреть в локалку билайна и через который мы поднимем тунель
- L2TP - название интерфейса тунеля