Здравствуйте, нужна помощь.Есть машина, на ней стоит FreeBSD 5.2.1
hitex# uname -a
FreeBSD hitex.portlink.ru 5.2.1-RELEASE FreeBSD 5.2.1-RELEASE #0: Mon Jan 30 15:32:37 KRAT 2006 root@hitex.portlink.ru:/usr/src/sys/i386/compile/ABSOLUTE i386
Есть сетевой интерфейс dc0, который смотрит в локалку:
hitex# ifconfig
dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 192.168.14.29 netmask 0xffffff00 broadcast 192.168.14.255
inet6 fe80::20a:48ff:fe0b:23d2%dc0 prefixlen 64 scopeid 0x1
ether 00:0a:48:0b:23:d2
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
plip0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3Выход в интернет осуществляется посредством vpn-соединения. Сервер vpn имеет адрес 192.168.10.1
На моей машине для подключения к vpn используется mpd:mpd.conf
default:
load portlink1portlink1:
new -i ng0 portlink1 portlink1
set iface disable on-demand
set iface addrs 192.168.100.189 192.168.14.1
set iface idle 0
set iface route default
# Configure the bundle account name.
set bundle disable multilink
set bundle authname <логин>
set bundle password <пароль>
# Configure IP addressing -- we get both endpoint assignments from peer.
set ipcp ranges 0.0.0.0/0 0.0.0.0/0
set ipcp yes vjcomp
# Configure the (only) link. We expect to be authenticated by peer.
set link disable chap pap
set link accept chap pap
set link yes acfcomp protocomp
set link enable no-orig-auth
set link keep-alive 10 75
set ipcp dns 212.41.2.228
set bundle disable compression
set ccp yes mppc
set ccp yes mpp-e40
set ccp yes mpp-e128
set bundle disable crypt-reqd
# "Open" connection (but don't actually dial until there's demand) (open iface)
openКак видно, при подключении создаётся интерфейс ng0
hitex# ifconfig ng0
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1500
inet 192.168.100.189 --> 192.168.100.1 netmask 0xffffffff
inet6 fe80::20a:48ff:fe0b:23d2%ng0 prefixlen 64 scopeid 0x6DNS-серверы прописаны в /etc/resolv.conf:
hitex# cat /etc/resolv.conf
domain portlink.ru
nameserver 192.168.10.254 # внутренний
nameserver 212.41.2.228 # внешний; на время, когда vpn-подключение отсутствует, этот сервер комментируетсяhitex#
Таблица роутинга до запуска mpd:
hitex# netstat -r
Routing tablesInternet:
Destination Gateway Flags Refs Use Netif Expire
default 192.168.14.1 UGS 0 6 dc0
localhost localhost UH 0 14 lo0
192.168.0/16 192.168.14.1 UGS 0 1567 dc0
192.168.14 link#1 UC 0 0 dc0
192.168.14.1 00:07:e9:2a:73:93 UHLW 2 0 dc0 587
host14-24.k45 00:e0:4c:b7:f5:5d UHLW 0 11 dc0 1051
192.168.100.1 192.168.100.189 UH 0 0 ng0
192.168.100.189 lo0 UHS 0 0 lo0
Чтобы локалка и инет работали одновреммено, для запуска mpd используется скрипт:hitex# cat ./mpd.sh
mpd -b
echo 'Запуск mpd..'
sleep 5 # ждём пока запустится mpd
route delete default
route add 192.168.0.0/16 192.168.14.1
route add default 192.168.100.1
echo 'Роутинг прописан..'
ee /etc/resolv.conf && echo 'Vpn-сессия открыта.' # комментируем внешний dns-серверhitex#
Таблица роутинга, соответственно, меняет содержание:hitex# netstat -r
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 192.168.100.1 UGS 0 607 ng0 # пакеты по дефолту теперь отправляются внешнему маршрутизатору
localhost localhost UH 0 14 lo0
192.168.0/16 192.168.14.1 UGS 0 1529 dc0
192.168.14 link#1 UC 0 0 dc0
192.168.14.1 00:07:e9:2a:73:93 UHLW 1 0 dc0 634
host14-24.k45 00:e0:4c:b7:f5:5d UHLW 0 11 dc0 1098
192.168.100.1 192.168.100.189 UH 1 0 ng0
192.168.100.189 lo0 UHS 0 0 lo0Для отключения mpd используется mpd-end.sh:
route delete default
route add default 192.168.14.1
sleep 2
ee /etc/resolv.conf && ps -aux | grep mpd && echo 'Осталось убить mpd: kill -9 <pid>'
Слуйчайно нажал 'Отправить', продолжение..в общем всё вроде бы кое-как работает.
Работало. Пока не поставил pfpf.conf:
#!/bin/sh
##############################################################################3
# our local networks settings
##############################################################################3# Define our outside interface.
ext_if = "dc0"# Define our inside interface.
int_if = "ng0"# Define tcp services on outside interface
ext_tcp_services = " { 1000, 1001 } "
##############################################################################3
# settings
##############################################################################3set block-policy drop
set loginterface $ext_if##############################################################################3
# scrubbing
##############################################################################3#scrub in all
#1.1Vhodjashjie fragmenti nakaplivajutsja i peredajutsja daljshe filjtru
scrub in on $ext_if all fragment reassemble min-ttl 20 max-mss 1440#1.2Ubiraet opciju don't fragment iz ip-zagalovka
scrub in on $ext_if all no-df#1.3 Ni odnoj iz storon ne pozvoljaetsja umenjshitj IP TTL TTL dlja vseh paketov ustanavlivaetsja v maksimum
scrub on $ext_if all reassemble tcp##############################################################################3
# NAT
##############################################################################3# nat on $ext_if from $int_if:network to any -> ($ext_if)
nat-anchor mpd
binat-anchor mpd
rdr-anchor mpd##############################################################################3
# Filters
##############################################################################3# default deny filter policy
block all
pass quick on lo0 all##############################################################################3
# configure internal interface
##############################################################################3# pass everything from me to LAN
pass in quick on $ext_if from $ext_if:network to any
pass out quick on $ext_if from any to $ext_if:network
pass out quick on $int_if from any to any
pass in quick on $int_if from any to any port!= { 23, 6000 }
antispoof log quick for $ext_if inet##############################################################################3
# configure external interface
##############################################################################3# anti spoofing defence
antispoof log quick for $ext_if inet# deny all packets to not me
block in quick on $ext_if inet from any to !($ext_if)
# Deny auth traffic
block return in quick on $ext_if proto tcp from any to any port 113# Deny DHCP traffic
block in quick on $ext_if proto udp from any to any port { 67, 68 }# deny SMB broadcasts
block in quick on $ext_if proto udp from any to any port { 137, 138, 139 }
# allow all icmps
pass in inet proto icmp all keep state# allow outbound connections
pass out on $ext_if proto tcp all modulate state flags S/SA
pass out on $ext_if proto { udp, icmp } all keep statepass out on $ext_if proto gre all
pass in on $ext_if proto gre allanchor mpd
pf отказывается запускатся при запуске, т.к. не находит интерфейса ng0.
Но его и нету, т.к. он появляется только при запуске mpd. Если убрать все строчки, в которых есть $int_if, то инет вобще не видно.Прошу совета, как решить проблему.
Заранее спасибо.P.S. извините, что без тэгов
>Слуйчайно нажал 'Отправить', продолжение..
>
>в общем всё вроде бы кое-как работает.
>Работало. Пока не поставил pf
>
>pf.conf:
>
>#!/bin/sh
>##############################################################################3
># our local networks settings
>##############################################################################3
>
># Define our outside interface.
>ext_if = "dc0"
>
># Define our inside interface.
>int_if = "ng0"
>
># Define tcp services on outside interface
>
>ext_tcp_services = " { 1000, 1001 } "
>
>
>##############################################################################3
># settings
>##############################################################################3
>
>set block-policy drop
>set loginterface $ext_if
>
>##############################################################################3
># scrubbing
>##############################################################################3
>
>#scrub in all
>
>#1.1Vhodjashjie fragmenti nakaplivajutsja i peredajutsja daljshe filjtru
>scrub in on $ext_if all fragment reassemble min-ttl 20 max-mss 1440
>
>#1.2Ubiraet opciju don't fragment iz ip-zagalovka
>scrub in on $ext_if all no-df
>
>#1.3 Ni odnoj iz storon ne pozvoljaetsja umenjshitj IP TTL TTL dlja
>vseh paketov ustanavlivaetsja v maksimum
>scrub on $ext_if all reassemble tcp
>
>##############################################################################3
># NAT
>##############################################################################3
>
># nat on $ext_if from $int_if:network to any -> ($ext_if)
>
> nat-anchor mpd
> binat-anchor mpd
> rdr-anchor mpd
>
>##############################################################################3
># Filters
>##############################################################################3
>
># default deny filter policy
>block all
>
>
>pass quick on lo0 all
>
>##############################################################################3
># configure internal interface
>##############################################################################3
>
># pass everything from me to LAN
>
>pass in quick on $ext_if from $ext_if:network to any
>pass out quick on $ext_if from any to $ext_if:network
>pass out quick on $int_if from any to any
>pass in quick on $int_if from any to any port!= { 23,
>6000 }
>antispoof log quick for $ext_if inet
>
>##############################################################################3
># configure external interface
>##############################################################################3
>
># anti spoofing defence
>antispoof log quick for $ext_if inet
>
># deny all packets to not me
>block in quick on $ext_if inet from any to !($ext_if)
>
>
># Deny auth traffic
>block return in quick on $ext_if proto tcp from any to any
>port 113
>
># Deny DHCP traffic
>block in quick on $ext_if proto udp from any to any port
>{ 67, 68 }
>
># deny SMB broadcasts
>block in quick on $ext_if proto udp from any to any port
>{ 137, 138, 139 }
>
>
>
>
># allow all icmps
>pass in inet proto icmp all keep state
>
># allow outbound connections
>pass out on $ext_if proto tcp all modulate state flags S/SA
>pass out on $ext_if proto { udp, icmp } all keep state
>
>
>pass out on $ext_if proto gre all
>pass in on $ext_if proto gre all
>
>anchor mpd
>
>
>pf отказывается запускатся при запуске, т.к. не находит интерфейса ng0.
>Но его и нету, т.к. он появляется только при запуске mpd. Если
>убрать все строчки, в которых есть $int_if, то инет вобще не
>видно.
>
>Прошу совета, как решить проблему.
>Заранее спасибо.
>
>P.S. извините, что без тэговfreebsd-pf@freebsd.org
Там есть, MPD+PF
http://ezine.daemonnews.org/200406/mpd.html
Всё что нужно сделать - исправить одну строчку
int_if = "ng0"на
int_if = "(ng0)"
>Всё что нужно сделать - исправить одну строчку
>int_if = "ng0"
>
>на
>
>int_if = "(ng0)"Не помогает... на все правила где $int_if пишет синтаксическую ошибку :(( че делоть то?
>>Всё что нужно сделать - исправить одну строчку
>>int_if = "ng0"
>>
>>на
>>
>>int_if = "(ng0)"
>
>Не помогает... на все правила где $int_if пишет синтаксическую ошибку :(( че
>делоть то?int_if ="(ng0)" - это не то.
пробуйте так:
nat on $ext_if from !($ext_if) to any -> ($ext_if)