Задача: Поднять ВПН сервер для подключения пользователей локальной сети к инету.
ОС: FreeBSD 6.0
Все сделано согласно статьи http://wiki.bsdportal.ru/doc:vpn
Авторизация по Радиусу проходит нормально ВПН подключения работают, но инета у впн клиентов нет, пробовал запускать nat без впн все работает и инет есть, по впн инета нет.Вот конфиги:
mpd.conf
default:
load pptp0
load pptp1
load pptp2
load pptp3
load pptp4
load pptp5
load pptp6
load pptp7
load pptp8
load pptp9
load pptp10
load pptp11
load pptp12
load pptp13
load pptp14
load pptp15
pptp0:
new -i ng0 pptp0 pptp0
set ipcp ranges 192.168.33.254/32 10.10.10.1/32
load pptp_all
pptp1:
new -i ng1 pptp1 pptp1
set ipcp ranges 192.168.33.254/32 10.10.10.2/32
load pptp_all
pptp2:
new -i ng2 pptp2 pptp2
set ipcp ranges 192.168.33.254/32 10.10.10.3/32
load pptp_all
pptp3:
new -i ng3 pptp3 pptp3
set ipcp ranges 192.168.33.254/32 10.10.10.4/32
load pptp_all
pptp4:
new -i ng4 pptp4 pptp4
set ipcp ranges 192.168.33.254/32 10.10.10.5/32
load pptp_all
pptp5:
new -i ng5 pptp5 pptp5
set ipcp ranges 192.168.33.254/32 10.10.10.6/32
load pptp_all
pptp6:
new -i ng6 pptp6 pptp6
set ipcp ranges 192.168.33.254/32 10.10.10.7/32
load pptp_all
pptp7:
new -i ng7 pptp7 pptp7
set ipcp ranges 192.168.33.254/32 10.10.10.8/32
load pptp_all
pptp8:
new -i ng8 pptp8 pptp8
set ipcp ranges 192.168.33.254/32 10.10.10.9/32
load pptp_all
pptp9:
new -i ng9 pptp9 pptp9
set ipcp ranges 192.168.33.254/32 10.10.10.10/32
load pptp_all
pptp10:
new -i ng10 pptp10 pptp10
set ipcp ranges 192.168.33.254/32 10.10.10.11/32
load pptp_all
pptp11:
new -i ng11 pptp11 pptp11
set ipcp ranges 192.168.33.254/32 10.10.10.12/32
load pptp_all
pptp12:
new -i ng12 pptp12 pptp12
set ipcp ranges 192.168.33.254/32 10.10.10.13/32
load pptp_all
pptp13:
new -i ng13 pptp13 pptp13
set ipcp ranges 192.168.33.254/32 10.10.10.14/32
load pptp_all
pptp14:
new -i ng14 pptp14 pptp14
set ipcp ranges 192.168.33.254/32 10.10.10.15/32
load pptp_all
pptp15:
new -i ng15 pptp15 pptp15
set ipcp ranges 192.168.33.254/32 10.10.10.16/32
load pptp_all
pptp_all:
set iface disable on-demand
set bundle disable multilink
set link yes acfcomp protocomp
set link no pap chap
set link enable chap
set link keep-alive 60 180
set ipcp yes vjcomp
set ipcp dns 192.168.33.254 # или любой другой доступный DNS
set pptp enable incoming
set pptp disable originate
set radius config /usr/local/etc/mpd/radius.conf
set radius retries 3
set bundle enable radius-acct
set bundle enable radius-auth
set ipcp yes radius-ip
-------------------
mpd.links
pptp0:
set link type pptp
pptp1:
set link type pptp
pptp2:
set link type pptp
pptp3:
set link type pptp
pptp4:
set link type pptp
pptp5:
set link type pptp
pptp6:
set link type pptp
pptp7:
set link type pptp
pptp8:
set link type pptp
pptp9:
set link type pptp
pptp10:
set link type pptp
pptp11:
set link type pptp
pptp12:
set link type pptp
pptp13:
set link type pptp
pptp14:
set link type pptp
pptp15:
set link type pptp
---------------------
radius.conf
acct 127.0.0.1 <passwd>
auth 127.0.0.1 <passwd>
-------------
ipfw.sh
#!/bin/shfwcmd="/sbin/ipfw"
${fwcmd} -f flush
${fwcmd} -f flush pipe
${fwcmd} -f flush queue${fwcmd} pipe 1 config bw 512Kbit/s queue 50 # для обжимки трафа пользуемся pipe'ами
${fwcmd} pipe 2 config bw 512Kbit/s queue 50${fwcmd} add pipe 1 ip from 10.10.10.0/24 to any in # вгоняем траф в пайпы
${fwcmd} add pipe 2 ip from any to 10.10.10.0/24 out${fwcmd} add tee 100 ip from 10.10.10.0/24 to any in # копируем траф в divert-socket для netams.
${fwcmd} add tee 100 ip from any to 10.10.10.0/24 out-----------------------
pf.rules
ext_ip="xx.xx.xx.xx" # внешний ip-адрес сервера
int_if="xl0" # интерфейс смотрящий в локалку
int_net_vpn="10.10.10.0/24" # внутренняя VPN-сеть
local_net="192.168.33.0/24" # внутрення локалка
int_ip="192.168.33.254" # внутренний ип в локалкеnat on an0 from $int_net_vpn to any -> $ext_ip # собсно NAT
pass quick on lo0 all # разрешаем все на lo0
pass quick from $ext_ip to any # Разрешаем траф
pass quick from any to $ext_ip # на внешнем ippass quick from $int_net_vpn to any # разрешаем любой траф
pass quick from any to $int_net_vpn # по впн-сетиpass quick from $local_net to any # разрешаем любой траф
pass quick from any to $local_net # по локалке--------------------
rc.conf
hostname="ns.localnet"
ifconfig_an0="inet xxx.xx.xx.xx netmask 255.255.255.xx"
ifconfig_xl0="inet 192.168.33.254 netmask 255.255.255.0"
defaultrouter="xx.xx.xx.xx"
gateway_enable="YES"
tcp_extensions="YES"
accounting_enable="YES"pf_enable="YES"
pf_rules="/etc/pf.rules"
pf_flags=""
pflog_enable="YES"
pflog_logfile="/var/log/pflog"
pflog_flags=""firewall_enable="YES"
firewall_script="/etc/ipfw.sh"sshd_enable="YES"
inetd_enable="YES"
named_enable="YES"
radiusd_enable="YES"
mysql_enable="YES"
webmin_enable="YES"
mpd_enable="YES"
proftpd_enable="YES"saver="blank"
font8x8="cp866-8x8"
font8x14="cp866-8x14"
font8x16="cp866b-8x16"
scrnmap="koi8-r2cp866"
keyrate="slow"
keymap="ru.koi8-r"
-------------
Результат ifconfigan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet6 fe80::240:96ff:fe28:71f2%an0 prefixlen 64 scopeid 0x1
inet xxx.xxx.xx.xx netmask 0xffffffe0 broadcast xx.xx.xx.xx
ether 00:40:96:28:71:f2
media: IEEE 802.11 Wireless Ethernet autoselect (DS/11Mbps)
status: associated
ssid 1:xxxx channel 4
stationname FreeBSD
authmode OPEN privacy OFF deftxkey 1 txpowmax 0 rtsthreshold 0
fragthreshold 0 roaming DEVICE
xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=8<VLAN_MTU>
inet6 fe80::260:8ff:fe26:90df%xl0 prefixlen 64 scopeid 0x2
inet 192.168.33.254 netmask 0xffffff00 broadcast 192.168.33.255
ether 00:60:08:26:90:df
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
plip0: flags=108810<POINTOPOINT,SIMPLEX,MULTICAST,NEEDSGIANT> mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
inet 127.0.0.1 netmask 0xff000000
pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33208
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1400
inet 192.168.33.254 --> 10.10.10.1 netmask 0xffffffff
inet6 fe80::240:96ff:fe28:71f2%ng0 prefixlen 64 scopeid 0x6
ng1: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
ng2: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
ng3: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
ng4: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
ng5: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
ng6: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
ng7: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
ng8: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
ng9: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
ng10: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
ng11: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
ng12: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
ng13: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
ng14: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
ng15: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
У тебя mpd не выдает клиенту default route:
Добавь в конфиг:
set iface route default
поставил не помогло...
>У тебя mpd не выдает клиенту default route:
>Добавь в конфиг:
>set iface route defaultмаразм чистый, эта строчка добавит default route не у клиента, а у сервера!!!!
этот параметр нужён только в том случае если этот интерфейс в mpd смотрит в инет
>nat on an0 from $int_net_vpn to any -> $ext_ip # собсно NATздесь нужно написать вместо $ext_ip имя интерфейса, который смотрит в инет, на сколько я понял это xl0 и получится
nat on an0 from $int_net_vpn to any -> (xl0)или красивее завести переменную например
ext_if="xl0"
и тогда написать
nat on an0 from $int_net_vpn to any -> ($ext_if)
в конфиг MPD ничего добавлять вроди не нужно, единственно поправь его чтобы в нём в начале строк не было никаких пробелов!! вместо них использую табуляцию, МПД ОЧЕНЬ НЕ ЛЮБИТ ПРОБЕЛЫ!!!
как оказалось дело было в ipfw
после следующих изменений пакеты пошли:
ipfw.sh
#!/bin/shfwcmd="/sbin/ipfw"
${fwcmd} -f flush
${fwcmd} -f flush pipe
${fwcmd} -f flush queue#${fwcmd} pipe 1 config bw 512Kbit/s queue 50 # для обжимки трафа пользуемся pip
#${fwcmd} pipe 2 config bw 512Kbit/s queue 50
${fwcmd} add pipe 1 ip from 10.10.10.0/24 to any in # вгоняем траф в пайпы
${fwcmd} add pipe 2 ip from any to 10.10.10.0/24 out${fwcmd} add tee 100 ip from 10.10.10.0/24 to any in # копируем траф в divert-so
${fwcmd} add tee 100 ip from any to 10.10.10.0/24 out${fwcmd} add 1 pass all from any to any
Но появились ряд проблем ping с клиента какой то странный
Обмен пакетами с ya.ru [213.180.204.8] по 32 байт:Ответ от 213.180.204.8: число байт=32 время=20мс TTL=59
Превышен интервал ожидания для запроса.
Ответ от 213.180.204.8: число байт=32 время=20мс TTL=59
Превышен интервал ожидания для запроса.
Ответ от 213.180.204.8: число байт=32 время=27мс TTL=59
Превышен интервал ожидания для запроса.
Ответ от 213.180.204.8: число байт=32 время=32мс TTL=59
Превышен интервал ожидания для запроса.
Ответ от 213.180.204.8: число байт=32 время=20мс TTL=59
Превышен интервал ожидания для запроса.
Ответ от 213.180.204.8: число байт=32 время=23мс TTL=59Хотя с сервера все отлично:
# ping www.ya.ru
PING ya.ru (213.180.204.8): 56 data bytes
64 bytes from 213.180.204.8: icmp_seq=0 ttl=60 time=32.701 ms
64 bytes from 213.180.204.8: icmp_seq=1 ttl=60 time=21.842 ms
64 bytes from 213.180.204.8: icmp_seq=2 ttl=60 time=42.835 ms
64 bytes from 213.180.204.8: icmp_seq=3 ttl=60 time=21.146 ms
64 bytes from 213.180.204.8: icmp_seq=4 ttl=60 time=20.422 ms
64 bytes from 213.180.204.8: icmp_seq=5 ttl=60 time=22.985 ms
64 bytes from 213.180.204.8: icmp_seq=6 ttl=60 time=28.417 ms
64 bytes from 213.180.204.8: icmp_seq=7 ttl=60 time=31.429 ms
64 bytes from 213.180.204.8: icmp_seq=8 ttl=60 time=22.871 ms
64 bytes from 213.180.204.8: icmp_seq=9 ttl=60 time=25.029 ms
64 bytes from 213.180.204.8: icmp_seq=10 ttl=60 time=21.976 ms
64 bytes from 213.180.204.8: icmp_seq=11 ttl=60 time=24.851 ms
64 bytes from 213.180.204.8: icmp_seq=12 ttl=60 time=21.127 ms
64 bytes from 213.180.204.8: icmp_seq=13 ttl=60 time=20.829 msВ чем может быть проблема?
IMHO: для чистоты эксперемента выключите pf! Зачем вам два работающих фаервола одновременно???