URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID10
Нить номер: 2561
[ Назад ]

Исходное сообщение
"Проблема: vpn через mpd под freebsd с pf. Много."

Отправлено hitex , 03-Фев-06 08:34 
Здравствуйте, нужна помощь.

Есть машина, на ней стоит 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 portlink1

portlink1:
        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 0x6

DNS-серверы прописаны в /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 tables

Internet:
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>'


Содержание

Сообщения в этом обсуждении
"Проблема: vpn через mpd под freebsd с pf. Много."
Отправлено hitex , 03-Фев-06 08:44 
Слуйчайно нажал 'Отправить', продолжение..

в общем всё вроде бы кое-как работает.
Работало. Пока не поставил 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. извините, что без тэгов


"Проблема: vpn через mpd под freebsd с pf. Много."
Отправлено Андрей Кочетков , 14-Фев-06 08:29 
>Слуйчайно нажал 'Отправить', продолжение..
>
>в общем всё вроде бы кое-как работает.
>Работало. Пока не поставил 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


"Проблема: vpn через mpd под freebsd с pf. Много."
Отправлено Andrey , 02-Мрт-06 08:47 
http://ezine.daemonnews.org/200406/mpd.html

"Проблема: vpn через mpd под freebsd с pf. Много."
Отправлено AwesomeBanana , 08-Янв-07 07:27 
Всё что нужно сделать - исправить одну строчку
int_if = "ng0"

на

int_if = "(ng0)"


"Проблема: vpn через mpd под freebsd с pf. Много."
Отправлено lisrich , 21-Фев-09 09:14 
>Всё что нужно сделать - исправить одну строчку
>int_if = "ng0"
>
>на
>
>int_if = "(ng0)"

Не помогает... на все правила где $int_if пишет синтаксическую ошибку :(( че делоть то?


"Проблема: vpn через mpd под freebsd с pf. Много."
Отправлено Гость , 08-Июл-09 09:14 
>>Всё что нужно сделать - исправить одну строчку
>>int_if = "ng0"
>>
>>на
>>
>>int_if = "(ng0)"
>
>Не помогает... на все правила где $int_if пишет синтаксическую ошибку :(( че
>делоть то?

int_if ="(ng0)" - это не то.

пробуйте так:

nat on $ext_if from !($ext_if) to any -> ($ext_if)