PDA

Показать полную графическую версию : Проброс портов Freebsd 9, mpd, pf


Abadd0N
25-09-2012, 23:08
Ситуация такая:
Провайдер билайн, в качестве впн клиента (L2TP) использую mpd, собственно его же использую и в качестве ната на внешний интерфейс, а проброс портов возложил на pf.
Проблема 1: (по сути не столь критичная, но если кто сталкивался, был бы не прочь услышать мнение): при использовании pf в качестве ната на внешний интерфейс (который создает mpd) постоянно дисконнектит инет, чуть ли не каждые 5 минут (хотя при использовании mpd всё работает и натится отлично).

Проблема 2: Не работает проброс портов, который осуществляется pf, хотя если посмотреть в лог пакет фильтра, проброс происходит, но на тачку на которую осуществляется проброс ничего не приходит.

На данный момент uname:
$ uname -a
FreeBSD serv 9.1-PRERELEASE FreeBSD 9.1-PRERELEASE #0: Sun Sep 23 16:02:34 NOVT 2012 adm@serv:/usr/obj/usr/src/sys/mykern120923 amd64

Те же проблемы испытывал и на stable ветке 9.0

rc.conf

keymap="ru.koi8-r.win.kbd"
dumpdev="AUTO"

synchronous_dhclient="YES"
defaultrouter="10.59.0.1"
ifconfig_em1="DHCP"
ifconfig_em0="inet 192.168.1.1 netmask 255.255.0.0"
hostname="serv"

pf_enable="YES"
pf_rules="/etc/pf.conf"
pflog_enable="YES"
pflog_logfile="/var/log/pflog"
pfsync_enable="NO" # Expose pf state to other hosts for syncing
pfsync_syncdev="" # Interface for pfsync to work through
pfsync_syncpeer="" # IP address of pfsync peer host
pfsync_ifconfig=""
ftpproxy_enable="YES"
ftpproxy_flags="-D 0"
mpd_enable="YES"
mpd_flags="-b"

sshd_enable="YES"
apache22_enable="YES"
mysql_enable="YES"
mysql_limits="NO"
mysql_dbdir="/var/db/mysql"
mysql_args="--log"

linux_enable="YES"
accounting_enable="YES"


pf.conf

###########################
# Variables #
#+++++++++++++++++++++++++#
int_if="em0"
ext_if="em1"
vpn_if="ng0"
desk="192.168.1.2"
intnet="192.168.0.0/16"
#+++++++++++++++++++++++++#

#set block-policy return
set skip on lo
#scrub all
#set optimization aggressive
#scrub in all fragment reassemble
#scrub out all random-id max-mss 1400

nat on $ext_if from $int_if:network to $ext_if:network -> ($ext_if) #проброс в локальную сеть провайдера
#nat on $vpn_if from $int_if:network to any -> ($vpn_if)


rdr pass log on $vpn_if proto tcp from any to any port 18888 -> 192.168.1.2 port 18888
rdr pass log on $vpn_if proto tcp from any to any port 80 -> 192.168.1.3 port 80
rdr pass log on $vpn_if proto tcp from any to ($vpn_if) port 81 -> 192.168.1.3 port 80

pass all


mpd5.conf

startup:
#Log sobitiy
log +ALL -EVENTS -FRAME

default:
load L2TP
#load PPTP

L2TP:
create bundle static L2TP
set ipcp no vjcomp
set iface idle 0
set iface enable nat
set iface enable tcpmssfix
set iface up-script /usr/local/etc/mpd5/up.sh
set iface down-script /usr/local/etc/mpd5/down.sh
create link static L2 l2tp
set link action bundle L2TP
# set link mtu 1400
set link mtu 1460
set link latency 0
set link max-redial 0
set link redial-delay 60
set link accept chap
set link keep-alive 10 75
set l2tp peer tp.internet.beeline.ru
set auth authname login
set auth password passwd
open

Abadd0N
28-09-2012, 00:17
актуально

artem_
01-10-2012, 10:47
Abadd0N, вам по идее нужен NAT на интерфейсе ng0, т.к. он и является инерфейсом, через который ваша система взаимодействует с внешним миром.
Правила NAT применяются в PF по первому совпадению (не так как правила фильтрации).
Попробуйте привести свои правила трансляции к следующему виду:


nat on $vpn_if from $int_if:network to !($ext_if:network) -> ($vpn_if)
nat on $ext_if from $int_if:network to $ext_if:network -> ($ext_if)


P.S.
pass all - не есть хорошо, этим правилом вы разрешаете прохождение пакетов по всем возможным направлениям, включая доступ к внутренним ресурсам сети.

Abadd0N
22-10-2012, 02:48
artem_, по поводу ната - нат на внешний интерфейс осуществляется с помощью mpd
set iface enable nat
т.к. при использовании ната pf, инет постоянно рвался.
по поводу pass all - установлено на время тестирования.

P.S. Есть идея, что mpd конфиктит с pf, вскоре попробую l2tpd в качестве vpn клиента

Smoke2k
07-11-2012, 06:47
не знаю почему покеты застревают внутри хоста (проборос портов во внутрь), но по поводу l2tp выяснил такую фишку, мне очень долго не удавалось поднять l2tp клиен на линуксах/BSD, проблема оказалась в самом протоколе, он должен видеть vpn сервер всё время, решается статическим маршрутом к сети провайдера, а так же исключением в правиле NAT внутри pf. Сам так делал и работало стабильно без всяких проблем. Моё провило для нат выглядило так
nat on $vpn_if from $lan to !$isp_net -> $vpn_if
а следом правило для прова, тоже вроде как NAT (правда в моём случае второго NAT не было, потому что провайдер поставил свой Modem-router, который собственно и делал второй нат, который в моём случае и так не нужен был, но отключить возможности не было).
nat on $ext_if from $lan to $isp_net -> $ext_if
На самом деле я не знаю если сеть провайдера нужно натить...

Никакого нат в mpd я не использую, связка такая же FreeBSD90 +mpd5 + pf (w NAT) работает по сей день (правда по техническим причинам я сейчас на ADSL, но vpn клиен тот-же mpd5)
Мой mpd5.conf:
isp_l2tp:
create bundle static L2TPNV
set bundle disable compression round-robin encryption crypt-reqd bw-manage
set bundle enable ipcp
set iface disable proxy-arp
set ipcp yes vjcomp req-pri-dns req-sec-dns
set iface mtu 1492
set iface enable tee on-demand
set iface idle 0
set iface enable tcpmssfix
set iface up-script /usr/local/etc/mpd5/up.sh
set iface down-script /usr/local/etc/mpd5/down.sh
# set iface route 212.143.206.0/24

create link static L2NV l2tp
set link action bundle L2TPNV
set link latency 0
set link max-redial 0
set link disable acfcomp check-magic protocomp shortseq
set link deny chap-msv2 chap-msv1 eap acfcomp
set link enable multilink passive
set link mtu 1492
set link keep-alive 60 180
set l2tp peer "isp.vpn.server"
set auth authname "username"
set auth password "password"
set l2tp enable length
set l2tp self xl0
open
Не могу сказать что слишком силён в настройках mpd и тонкостях l2tp тунеля, но конфиг в моём случае работал без проблем, кстати как видно я тут пытался добавлять статический маршрут в самом конфиге, но это либо не работало либо работало через раз и потом маршрут не удалялся, потому сделал отдельные скрипты. к тому же у меня была проблема с заменой default gateway mpd почему-то не хотел его менять, а в случае отключения тунеля возвращать обратно... статические маршруты я добавлял там же.

В моём случае все пробросы работали и работают по сей день без всяких проблем...

Надеюсь это немного поможет (хотя много времени прошло, может уже не актуально)

PS
я тут видел в некоторых манулах от pf: redirect указывают раньше правил NAT, не знаю если это может иметь значение, но попробуйте поменять (хотя наверное глупость)

и кстати я в редайректах указывал ещё и адрес на который приходит запрос
rdr on $vpn_if proto { tcp udp } from any to $wan_ip port { 6881:6889 } -> $nas

Да и вот, я сейчас вспомнил, я так же сталкнулся с тем что редайрект не работал на интерфейсе где не было NAT, пытался завернуть 80-ый порт на squid, но через pf, оно ни в какую нихотело работать, вернее работало, но только в одну сторону (т.е. пакеты доходили до squid, но обратной дороги не находили). Разруливал через ipfw... возможно что в этом и кроется причина ;-)

Abadd0N
19-12-2012, 23:49
Всем спасибо, проблему таки решил, а была она в какомто косяке netgraph, убрал его из ядра, перекомпилил, теперь всё ок и пф норм работает и не дисконнектит и порты пробрасывает.
В ядре было:
# ================== Enable NETGRAPH =======================
options NETGRAPH
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 Для MPPC компрессии требуются специальные лицензионные файлы, которые не прилагаются в ядро
#=== options NETGRAPH_MPPC_COMPRESSION
options NETGRAPH_MPPC_ENCRYPTION
options NETGRAPH_ONE2MANY
options NETGRAPH_PPP
options NETGRAPH_PPTPGRE
options NETGRAPH_RFC1490
options NETGRAPH_SOCKET
options NETGRAPH_TCPMSS
options NETGRAPH_TEE
options NETGRAPH_TTY
options NETGRAPH_UI
options NETGRAPH_VJC
#===================================================




© OSzone.net 2001-2012