Beeline (Corbina) VPN - поднятие интернета под Gentoo: различия между версиями
ALEX (обсуждение | вклад) |
ALEX (обсуждение | вклад) |
||
Строка 52: | Строка 52: | ||
{{root|emerge sys-apps/net-tools}} | {{root|emerge sys-apps/net-tools}} | ||
{{root|emerge net-dialup/xl2tpd}} | {{root|emerge net-dialup/xl2tpd}} | ||
==Конфигурационные файлы и службы, которые надо настроить== | |||
Для корректной работы интернета нам потребуются следующие конфигурационные файлы: | |||
* {{Codeline|/etc/dhcp/dhclient.conf}} | |||
* {{Codeline|/etc/dhcp/dhclient-exit-hooks}} | |||
* {{Codeline|/etc/xl2tpd/xl2tpd.conf}} | |||
* {{Codeline|/etc/ppp/options}} | |||
* {{Codeline|/etc/ppp/options.xl2tp}} | |||
* {{Codeline|/etc/ppp/chap-secrets}} | |||
* {{Codeline|/etc/conf.d/net}} | |||
Причём, если такого файла у вас нет изначально, то создайте его! | |||
===Начнём с настройки DHCP клиента === | |||
{{root|nano /etc/dhcp/dhclient.conf}} | |||
{{File|/etc/dhcp/dhclient.conf| | |||
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" enclose="div"> | |||
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; | |||
</syntaxhighlight> | |||
}} | |||
{{root|nano /etc/dhcp/dhclient-exit-hooks}} | |||
{{File|/etc/dhcp/dhclient-exit-hooks| | |||
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" enclose="div"> | |||
#!/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 | |||
</syntaxhighlight> | |||
}} | |||
Даём права на исполнение: | |||
{{root|chmod a+x /etc/dhcp/dhclient-exit-hooks}} | |||
===Конфигурирование L2TP=== | |||
{{root|nano /etc/xl2tpd/xl2tpd.conf}} | |||
{{File|/etc/xl2tpd/xl2tpd.conf| | |||
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" enclose="div"> | |||
[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 | |||
</syntaxhighlight> | |||
}} | |||
{{Note|Не забудь-те под себя изменить ''VASH_LOGIN_V_BEELINE'' на ваш логин в Билайне}} | |||
{{root|nano /etc/ppp/options}} | |||
{{File|/etc/ppp/options| | |||
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" enclose="div"> | |||
lcp-echo-failure 10 | |||
lcp-echo-adaptive | |||
lcp-echo-interval 60 | |||
</syntaxhighlight> | |||
}} | |||
{{root|nano /etc/ppp/options.xl2tp}} | |||
{{File|/etc/ppp/options.xl2tp| | |||
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" enclose="div"> | |||
name VASH_LOGIN_V_BEELINE | |||
remotename beeline | |||
mru 1460 | |||
mtu 1460 | |||
noaccomp | |||
nopcomp | |||
novj | |||
novjccomp | |||
nobsdcomp | |||
nodeflate | |||
noipx | |||
nomp | |||
defaultroute | |||
unit 0 | |||
</syntaxhighlight> | |||
}} | |||
{{Note|Не забудь-те под себя изменить ''VASH_LOGIN_V_BEELINE'' на ваш логин в Билайне. Так же важно обратить внимание на '''unit 0'''. Цифра 0 показывает, что используется ppp'''0''', если у вас другой номер, то поменяйте на свой.}} | |||
{{root|nano /etc/ppp/chap-secrets}} | |||
{{File|/etc/ppp/chap-secrets| | |||
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" enclose="div"> | |||
# Secrets for authentication using CHAP | |||
# client server secret IP addresses | |||
VASH_LOGIN_V_BEELINE * VASH_PAROL_V_BEELINE * | |||
</syntaxhighlight> | |||
}} | |||
{{Note|Не забудь-те под себя изменить ''VASH_LOGIN_V_BEELINE'' на ваш логин в Билайне, а VASH_PAROL_V_BEELINE на ваше пароль в билайне. В этой строке '''4''' параметра! Лоигн, сервер (звёздочка означает для всех), пароль и ip адрес.}} | |||
==Настройки сетевых интерфейсов - NET=== | |||
{{root|nano /etc/conf.d/net}} | |||
{{File|/etc/conf.d/net| | |||
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" enclose="div"> | |||
#настройки моей домашней сети 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 | |||
} | |||
</syntaxhighlight> | |||
}} | |||
{{Note|Файл постарался, где возможно и нужно снабдить комментариями. Настройки моей домашней сети можно удалить, если у вас всё по другому.}} | |||
Под себя нужно в конфиге изменить: | |||
* '''L2TP_BACKEND''' - имя используемого пакета для l2tp | |||
* '''DEPEND''' - имя сетевого интерфейса, который будет смотреть в локалку билайна и через который мы поднимем тунель | |||
* '''L2TP''' - название интерфейса тунеля | |||
{{Note|Обратите внимание на опиции config_eth0, dhclient_eth0, config_ppp0, depend_ppp0() и поправить их в зависимости от значений тех переменных, которые указаны выше.}} |
Версия 08:21, 2 марта 2013
Материал полностью основан на топике пользователя 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 - название интерфейса тунеля