freebsd 10 + mpd5 + l2tp beeline
Добавлено: 25 авг 2015, 17:56
Я решил проапгрейдить свою Freebsd 9.1 (которая обновлялась с версии 6,2) до Freebsd 10.2
Взял новый (старый - валяющийся без дела) жесткий диск, вставил его в стенд и залил туда Ось.
Какое - же было мое удивление, когда после установки всех нужных мне портов, пересборки мира и ядра mpd5 не заработал.
Причем не заработал он красиво, а именно соединение устанавливается, но трафик через ng0 не идет, потом идет дисконнект и на этом все останавливается
Бился с этим около трех дней пока не обратил внимание на странный роут в таблице маршрутизации
где 85.21.0.171 - пир провайдера
ng0 - виртуальный интерфейс
Тогда начал капать в эту сторону, после еще одного дня капания нашел мануал на лисяре
http://forum.lissyara.su/viewtopic.php?t=40166
в статье было написано следующее
ftp://ftp.toadmins.ru/images/os/freebsd ... .patch.tgz
дальше было просто
Вот собственно фикс данной проблемы
на всякий случай привожу конфиги ядра mpd и скрипты
Ядро
+ к штатным настройкам
mpd.conf
up.sh
down.sh
и наконец фаервол
pf.conf
Это как сами понимаете минимальная настройка, дальше дело вашей фантазии
Огромный респект Лиссяре и в частности автору комента MrStalker который написал патч
Взял новый (старый - валяющийся без дела) жесткий диск, вставил его в стенд и залил туда Ось.
Какое - же было мое удивление, когда после установки всех нужных мне портов, пересборки мира и ядра mpd5 не заработал.
Причем не заработал он красиво, а именно соединение устанавливается, но трафик через ng0 не идет, потом идет дисконнект и на этом все останавливается
Бился с этим около трех дней пока не обратил внимание на странный роут в таблице маршрутизации
Код: Выделить всё
85.21.0.171 link#7 UH 0 0 ng0
ng0 - виртуальный интерфейс
Тогда начал капать в эту сторону, после еще одного дня капания нашел мануал на лисяре
http://forum.lissyara.su/viewtopic.php?t=40166
в статье было написано следующее
где был выложен следующий патч для роутинга на FreeBSDПроблема заключается в этом изменении http://lists.freebsd.org/pipermail/svn- ... 45550.html
Из-за чего теперь невозможно удалить интерфейсный маршрут.
Проблема присутствует в 9.2, 10 и дальше будет.
Так как это "не баг, а фича", маловероятно что исправят, но надеемся на лучшее.
ftp://ftp.toadmins.ru/images/os/freebsd ... .patch.tgz
Код: Выделить всё
--- sys/net/if.c
+++ sys/net/if.c
@@ -1358,7 +1358,7 @@
err = rtrequest_fib(RTM_DELETE, rt_key(rt), rt->rt_gateway,
rt_mask(rt),
- rt->rt_flags|RTF_RNH_LOCKED|RTF_PINNED,
+ rt->rt_flags|RTF_RNH_LOCKED,
(struct rtentry **) NULL, rt->rt_fibnum);
if (err) {
log(LOG_WARNING, "if_rtdel: error %d\n", err);
--- sys/net/route.c
+++ sys/net/route.c
@@ -1104,13 +1104,6 @@
error = 0;
}
#endif
- if ((flags & RTF_PINNED) == 0) {
- /* Check if target route can be deleted */
- rt = (struct rtentry *)rnh->rnh_lookup(dst,
- netmask, rnh);
- if ((rt != NULL) && (rt->rt_flags & RTF_PINNED))
- senderr(EADDRINUSE);
- }
/*
* Remove the item from the tree and return it.
@@ -1539,7 +1532,7 @@
bzero((caddr_t)&info, sizeof(info));
info.rti_ifa = ifa;
info.rti_flags = flags |
- (ifa->ifa_flags & ~IFA_RTSELF) | RTF_PINNED;
+ (ifa->ifa_flags & ~IFA_RTSELF);
info.rti_info[RTAX_DST] = dst;
/*
* doing this for compatibility reasons
@@ -1570,7 +1563,7 @@
if (error == 0) {
info.rti_ifa = ifa;
info.rti_flags = flags | RTF_RNH_LOCKED |
- (ifa->ifa_flags & ~IFA_RTSELF) | RTF_PINNED;
+ (ifa->ifa_flags & ~IFA_RTSELF);
error = rtrequest1_fib(cmd, &info, &rt, fibnum);
}
Код: Выделить всё
# tar xvzf route-fix.patch.tgz
# cd /usr/src
# patch < /PATH/TO/route-fix.patch
# make -j4 buildworld
# make -j4 buildkernel KERNCONF=YOU_KERN
# make installkernel KERNCONF=YOU_KERN
# make installworld
# reboot
на всякий случай привожу конфиги ядра mpd и скрипты
Ядро
+ к штатным настройкам
Код: Выделить всё
#PF
device pf
device pflog
device pfsync
#ALTQ
options ALTQ
options ALTQ_CBQ # Class Bases Queueing
options ALTQ_RED # Random Early Detection
options ALTQ_RIO # RED In/Out
options ALTQ_HFSC # Hierarchical Packet Scheduler
options ALTQ_CDNR # Traffic conditioner
options ALTQ_PRIQ # Priority Queueing
options ALTQ_NOPCC # Required for SMP build
options ALTQ_DEBUG
options HZ=1000
#IPSEC
options IPSEC
options IPSEC_FILTERTUNNEL
options IPSEC_NAT_T
device enc
device crypto
#NetGraph
options NETGRAPH #netgraph(4) system
options NETGRAPH_ASYNC
options NETGRAPH_BPF
options NETGRAPH_BRIDGE
options NETGRAPH_CISCO
options NETGRAPH_DEFLATE
options NETGRAPH_ECHO
options NETGRAPH_ETHER
options NETGRAPH_FRAME_RELAY
options NETGRAPH_GIF
options NETGRAPH_GIF_DEMUX
options NETGRAPH_HOLE
options NETGRAPH_IFACE
options NETGRAPH_IP_INPUT
options NETGRAPH_KSOCKET
options NETGRAPH_L2TP
options NETGRAPH_LMI
# MPPC compression requires proprietary files (not included)
#options NETGRAPH_MPPC_COMPRESSION
options NETGRAPH_MPPC_ENCRYPTION
options NETGRAPH_ONE2MANY
options NETGRAPH_PPP
options NETGRAPH_PPPOE
options NETGRAPH_PPTPGRE
options NETGRAPH_RFC1490
options NETGRAPH_SOCKET
options NETGRAPH_TCPMSS
options NETGRAPH_TEE
options NETGRAPH_TTY
options NETGRAPH_UI
options NETGRAPH_VJC
options MROUTING
Код: Выделить всё
startup:
set user webusername webuserpass admin
set web self int.ip.add.res 5006
set web open
default:
load vpn-l2tp
vpn-l2tp:
create bundle static B1
set bundle enable ipcp
set iface enable tcpmssfix
set iface idle 0
set iface up-script /usr/local/etc/mpd5/up.sh
set iface down-script /usr/local/etc/mpd5/down.sh
set ipcp no vjcomp
create link static L1 l2tp
set link action bundle B1
set auth authname <YOURLOGIN>
set auth password <YOURPASSWORD>
set link max-redial 0
set link redial-delay 60
set link mtu 1460
set link mru 1460
set link keep-alive 10 240
set link accept chap-md5
set link accept chap
set link no pap
set l2tp peer tp.internet.beeline.ru
# set l2tp peer 85.21.0.171 - это ip впн в моем регионе, у вас может быть другой
open
Код: Выделить всё
#!/bin/sh
gw=`netstat -rn | grep default | awk '{print $2}'`
/sbin/route delete $8
/sbin/route add $8 $gw
echo "/sbin/route add $8 $gw" > /root/mpd.up
/sbin/route delete default
/sbin/route add default -iface $1
echo $4 > /tmp/mpd_dr
echo $gw > /tmp/mpd_gw
Код: Выделить всё
#!/bin/sh
dr=`cat /tmp/mpd_dr`
gw=`cat /tmp/mpd_gw`
route delete $dr
route delete default
route add default $gw
rm -f /tmp/mpd_dr
rm -f /tmp/mpd_gw
pf.conf
Код: Выделить всё
# $FreeBSD: stable/10/tools/tools/tinybsd/conf/firewall/etc/pf.conf 162485 2006-09-20 22:24:20Z julian $
ext_if="em0" # replace with actual external interface name i.e., dc0
int_if="em1" # replace with actual internal interface name i.e., dc1
vpn_if="ng0"
int_net="10.10.10.0/24"
ext_addr="192.168.1.10/32"
table <mynets> const {192.168.1.0/24, 85.21.0.0/24, 78.107.1.0/24, 213.234.192.0/24, 85.21.78.0/24, 85.21.72.0/24}
set loginterface pflog0
set optimization normal
set block-policy drop
set skip on lo0
scrub in all
nat on $ext_if from $int_net to <mynets> -> ($ext_if:0)
nat on $vpn_if from $int_net to !<mynets> -> ($vpn_if:0)
block in log all
pass out log all
pass in on $ext_if proto tcp from any to $ext_if port 22 keep state
pass in on $int_if from $int_net to any
Огромный респект Лиссяре и в частности автору комента MrStalker который написал патч