[BSD] pf+FreeBSD custom route

Beregszászi Attila melon at m42.hu
2005. Dec. 6., K, 11:08:22 CET


Sziasztok,

van egy problémám, amin nem tudok túljutni. Adott egy FreeBSD router 3 interfésszel:
- em0 - isp1 (default route), gyors kapcsolat, de csak belső cím, a forgalom tőlünk függetlenül van tovább natolva
- em1 - isp2, külső ip cím, ezen keresztül üzemel, dns, mail és web
- em2 - lan sok alias-szal, számukra natol a router az em0-n keresztül.

A default route az em0 felé megy, az em1-en üzemelő szolgáltatásokat reply-to alkalmazásával állítottam be, azaz pl. a kintről (em1) jövő dns kérések válaszai ugyanarra mennek, és nem a default route-on keresztül.

a problémám az, hogy a router egyben mailszerver is, és az önmagáról kiinduló smtp forgalmat is szeretném az em1-en és annak gateway-én keresztül küldeni. Ezt a route-to alkalmazásával próbáltam, de az igazából csak befelé jövő forgalomnál működne. A pf.conf-ban található szabály nem megy (# e-mail forgalom) Kernel routing tábla nem jöhet szóba, mert tetszőleges cím 25-ös portjaira menő forgalmat kellene arra irányítani.

a pf.conf lényegi részei:

############################################################
IFWAN="em0"
IFSUL="em1"
IFLAN="em2"
LAN="172.22.2.0/23"

WANIP="192.168.100.2"	# em0
WANGW="192.168.100.1"	# em0 gw
SULIP="195.x.x.233"		# em1
SULGW="195.x.x.238"		# em1 gw

TCP_SERVICES_EXT = "{https,smtp,smtps,pop3,pop3s,imap,imaps}"
TCP_SERVICES_LAN = "{http,https,ntp}"

table <servers> file "/etc/pft.servers"

set block-policy drop
scrub in all

# NAT
#
nat on $IFWAN from <servers> to any -> $IFWAN
nat on $IFWAN from $LAN to any port {21 80 443} -> $IFWAN

# ez akkor kell, ha megszakad az em0 fele a kapcsolat
# olyankor jon a 'route change default 195.x.x.238'
nat on $IFSUL from $LAN to !$LAN -> $IFSUL

# RDR
#
rdr on $IFLAN proto tcp from $LAN to !$LAN port 80 -> \
	127.0.0.1 port 3128

block log
pass quick on lo0 all

### WAN
# em0 ping
pass in quick on $IFWAN inet proto icmp from any to ($IFWAN) \
	icmp-type 8 keep state
antispoof for $IFWAN

# e-mail forgalom
pass out quick on $IFWAN route-to ($IFSUL $SULGW) proto tcp \
	from any to any port 25 keep state
pass out on $IFWAN from any to any keep state

### IFSUL
antispoof for $IFSUL
pass out on $IFSUL all keep state

# icmp echo
pass in  quick on $IFSUL reply-to ($IFSUL $SULGW) proto icmp \
    from any to ($IFSUL) icmp-type 8 keep state
# ssh
pass in  quick on $IFSUL reply-to ($IFSUL $SULGW) proto tcp \
    from $TRUSTED_EXT to ($IFSUL) port 22 flags S/SA modulate state
# dns
pass in  quick on $IFSUL reply-to ($IFSUL $SULGW) proto { tcp,udp } \
    from any to ($IFSUL) port domain keep state
# egyeb tcp
pass in  quick on $IFSUL reply-to ($IFSUL $SULGW) proto tcp \
    from any to ($IFSUL) port $TCP_SERVICES_EXT modulate state

### LAN
pass on $IFLAN all
############################################################


Köszi,
Attila




További információk a(z) BSD levelezőlistáról