Два PPPoE в FreeBsd на одной сетевой карте.

Рейтинг:   / 1
ПлохоОтлично 

настраивая на своем сервере с FreeBsd. VoIp PBX Asterisk, столкнулся с задачай в которой мне потребовалось поднять два PPPoE соединения на одной сетевой карте.  Дано: ADSL модем работающий в режими бриджа с двумя виртуальными каналами VPI/VCI - 0/35 и VPI/VCI - 0/36  соответственно режим  инкапсуляции LLC (справидливо для провайдера ЮТК) Задача тривиальная как казалось бы, но есть непонятки как прописать два соединения в rc.conf.

 

 


default:
			set log Phase Chat IPCP CCP tun command
			ident user-ppp VERSION (biilt COMPILATIONDATE)
			set device PPPoE:sis0
			enable dns
			
			pppoe:
			set authname login1
			set authkey password
			set dial
			set login
			enable lqr echo
			set reconnect 3 5
			set redial 3 10
			set lqrperiod 45
			add default HISADDR
			
			voip:
			set authname login2
			set authkey password2
			set dial
			set login
			disable lqr
			set reconnect 3 5
			set redial 3 10
			set lqrperiod 45
			

 

Пробую запустить соеденение руками

 


sudo ppp -ddial pppoe 
	

 

Смотрим результат:

 


 tun0: flags=8051 metric 0 mtu 1492
			inet 87.117.6.XX --> 83.221.214.XXX netmask 0xffffffff 
			Opened by PID 447	

 

Всё поднялось. Стартуем второе соединение

 


 sudo ppp -ddial voip 	

 

Смотрим результат:

 


 tun1: flags=8051 metric 0 mtu 1492
			inet 10.9.2.35 --> 10.9.2.1 netmask 0xffffffff 
			Opened by PID 422	

 

Всё работает , пинги бегают, осталось сказать нашой системе как поднимать эти два соединения при старте. И тут был затык  Конструкция вида:  в rc.conf

 


 ppp_enable="YES"
			ppp_mode="ddial"
			ppp_profile="pppoe"
			ppp_enable="YES"
			ppp_mode="ddial"
			ppp_profile="voip"	

 

не заработала ... :( Хотя по отдельности если прописовать соединения всё работает. Тогда я сделал следующие

 


 cp -p /etc/rc.d/ppp /etc/rc.d/ppp1
	

 

затем  /etc/rc.d/ppp1 поправил скрипт до следующего вида:

 


 #!/bin/sh
			#
			# $FreeBSD: src/etc/rc.d/ppp,v 1.21.2.1.2.1 2009/10/25 01:10:29 kensmith Exp $
			#
			
			# PROVIDE: ppp
			# REQUIRE: netif
			# KEYWORD: nojail
			
			. /etc/rc.subr
			
			name="ppp"
			rcvar=`set_rcvar`
			command="/usr/sbin/${name}"
			start_cmd="ppp_start"
			stop_cmd="ppp_stop"
			start_postcmd="ppp_poststart"
			
			ppp_start_profile()
			{
			local _ppp1_profile _ppp1_mode _ppp1_nat _ppp1_unit
			local _ppp1_profile_cleaned _punct _punct_c
			
			_ppp1_profile=$1
			_ppp1_profile_cleaned=$1
			_punct=". - / +"
			for _punct_c in $_punct; do
			_ppp1_profile_cleaned=`ltr ${_ppp1_profile_cleaned} ${_punct_c} '_'`
			done
			
			# Check for ppp profile mode override.
			#
			eval _ppp1_mode=\$ppp_${_ppp1_profile_cleaned}_mode
			if [ -z "$_ppp1_mode" ]; then
			_ppp1_mode=$ppp1_mode
			fi
			
			# Check for ppp profile nat override.
			#
			eval _ppp1_nat=\$ppp_${_ppp1_profile_cleaned}_nat
			if [ -z "$_ppp1_nat" ]; then
			_ppp1_nat=$ppp1_nat
			fi
			
			# Establish ppp mode.
			#
			if [ "${_ppp1_mode}" != "ddial" -a "${_ppp1_mode}" != "direct" \
			-a "${_ppp1_mode}" != "dedicated" \
			-a "${_ppp1_mode}" != "background" ]; then
			_ppp1_mode="auto"
			fi
			
			rc_flags="-quiet -${_ppp1_mode}"
			
			# Switch on NAT mode?
			#
			case ${_ppp1_nat} in
			[Yy][Ee][Ss])
			rc_flags="$rc_flags -nat"
			;;
			esac
			
			# Check for hard wired unit
			eval _ppp1_unit=\$ppp_${_ppp1_profile_cleaned}_unit
			if [ -n "${_ppp1_unit}" ]; then
			_ppp1_unit="-unit${_ppp1_unit}"
			fi
			rc_flags="$rc_flags $_ppp1_unit"
			
			# Run!
			#
			su -m $ppp_user -c "$command ${rc_flags} ${_ppp1_profile}"
			}
			
			ppp_start()
			{
			local _ppp1_profile _p
			
			_ppp1_profile=$*
			if [ -z "${_ppp1_profile}" ]; then
			_ppp1_profile=$ppp1_profile
			fi
			
			echo -n "Starting PPP profile:"
			
			for _p in $_ppp1_profile; do
			echo -n " $_p"
			ppp_start_profile $_p
			done
			
			echo "."
			}
			
			ppp_poststart()
			{
			# Re-Sync ipfilter and pf so they pick up any new network interfaces
			#
			/etc/rc.d/ipfilter quietresync
			/etc/rc.d/pf quietresync
			}
			
			ppp_stop_profile() {
			local _ppp1_profile
			
			_ppp1_profile=$1
			
			/bin/pkill -f "^${command}.*${_ppp1_profile}\$" || \
			echo -n "(not running)"
			}
			
			ppp_stop() {
			local _ppp1_profile _p
			
			_ppp1_profile=$*
			if [ -z "${_ppp1_profile}" ]; then
			_ppp1_profile=$ppp1_profile
			fi
			
			echo -n "Stopping PPP profile:"
			
			for _p in $_ppp1_profile; do
			echo -n " $_p"
			ppp_stop_profile $_p
			done
			
			echo "."
			}
			
			load_rc_config $name
			run_rc_command $* 

 

aТеперь идем в rc.conf и смело там пишим: 

 


 ppp_enable="YES"
			ppp_mode="ddial"
			ppp_profile="pppoe"
			ppp1_enable="YES"
			ppp1_mode="ddial"
			ppp1_profile="voip"
	

 

Рестартуем наш сервер на FreeBsd для проверки, после перезагрузки делаем:

 


 sis0: flags=8843 metric 0 mtu 1500
			options=8
			ether 00:01:6c:c1:32:7b
			inet 192.168.1.2 netmask 0xffffff00 broadcast 192.168.1.255
			media: Ethernet autoselect (100baseTX )
			status: active
			vr0: flags=8843 metric 0 mtu 1500
			options=2808
			ether 00:05:5d:81:e3:24
			inet 192.168.0.10 netmask 0xffffff00 broadcast 192.168.0.255
			media: Ethernet autoselect (100baseTX )
			status: active
			plip0: flags=8810 metric 0 mtu 1500
			lo0: flags=8049 metric 0 mtu 16384
			options=3
			inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4 
			inet6 ::1 prefixlen 128 
			inet 127.0.0.1 netmask 0xff000000 
			tun0: flags=8051 metric 0 mtu 1492
			inet 10.9.2.35 --> 10.9.2.1 netmask 0xffffffff 
			Opened by PID 422
			tun1: flags=8051 metric 0 mtu 1492
			inet 87.117.6.XX --> 83.221.214.XXX netmask 0xffffffff 
			Opened by PID 447
	

 

Где tun0 и tun1 Наши соеденения PPPoE.

 

You have no rights to post comments

Яндекс.Метрика