pf роутинг

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
uHk
мл. сержант
Сообщения: 134
Зарегистрирован: 2008-05-21 15:16:48
Откуда: Москва
Контактная информация:

pf роутинг

Непрочитанное сообщение uHk » 2009-07-24 15:20:51

шлюзом по умолчанию является 80.240.209.1 (ext_if)
на внешних интерфейсах на udp 1195 слушает openvpn. когда клиент коннектится к ext_if - то все нормально, а если на ext_if_2 , то все равно ответы от openvpn уходят через ext_if, хотя ответы по 53 порту уходят правильно. в чем я допустил ошибку?
PS: в коде не получается выделить текст.

Код: Выделить всё

ext_if          = "em0"
ext_if_2        = "rl0"
vpn_if          = "{tun0 tun1}"
vpn_if_2        = "tun1"
int_if          = "fxp0"
int_if_2        = "rl1"

tcp_svc         = "http 1494 ssh 1195"
[b]udp_svc         = "domain 1195"[/b]

table <BRUTEFORCERS> persist
table <TO_NCPORT> persist file "/etc/pf.tables.ncport"
table <not_squid> const {192.168.0.0/16, 80.240.209.xx, 62.5.188.xx}

set block-policy return
set skip on lo0
set timeout { frag 10, tcp.established 3600 }
scrub in no-df

nat on $ext_if from 192.168.0.0/16 -> ($ext_if:0)
nat on $ext_if_2 from 192.168.0.0/16 -> ($ext_if_2:0)
#nat on $ext_if from !(self) -> ($ext_if:0)
#nat on $ext_if_2 from !(self) -> ($ext_if_2:0)

rdr on $ext_if_2 proto tcp from any to $ext_if_2 port 1494 tag EXT_IF_2 -> 192.168.7.4
rdr on $ext_if proto tcp from any to $ext_if port 1494 tag EXT_IF_1 -> 192.168.7.4
rdr on $ext_if proto tcp from any to $ext_if port smtp tag EXT_IF_1 -> 192.168.0.74
rdr on $ext_if proto tcp from any to $ext_if port http tag EXT_IF_1 -> 192.168.0.78
rdr on $ext_if_2 proto tcp from any to $ext_if_2 port smtp tag EXT_IF_2 -> 192.168.0.74
rdr on $ext_if_2 proto tcp from any to $ext_if_2 port http tag EXT_IF_2 -> 192.168.0.78
rdr on $int_if proto tcp from any to {$ext_if $ext_if_2} port http tag INT_IF_RDR -> 192.168.0.78
nat on $int_if tagged INT_IF_RDR -> ($int_if:0)
no rdr on $int_if proto tcp from <TO_NCPORT> to port 80
rdr on $int_if proto tcp from 192.168.0.0/24 to !<not_squid> port 80 -> 127.0.0.1 port 8080
rdr-anchor "NAV_to_6"
load anchor "NAV_to_6" from "/etc/pf.anchor.NAV_to_6"

block on {$ext_if $ext_if_2}
block return on {$ext_if $ext_if_2} inet proto tcp
block in quick on {$ext_if $ext_if_2} from <BRUTEFORCERS> to any
block in on $int_if_2 from 192.168.6.0/24 to any

pass out quick route-to ($ext_if 80.240.209.1) inet proto udp from $ext_if port 1195
pass out quick route-to ($ext_if 80.240.209.1) inet from $ext_if
pass out quick route-to ($ext_if_2 62.5.188.1) inet from $ext_if_2

pass in quick from ($ext_if_2:network) tagged EXT_IF_2
pass in quick reply-to ($ext_if_2 62.5.188.1) tagged EXT_IF_2

pass in quick reply-to ($ext_if 80.240.209.1) tagged EXT_IF_1
pass in quick from ($ext_if:network) tagged EXT_IF_1
pass in quick reply-to ($ext_if_2 62.5.188.1) tagged EXT_IF_2
pass in quick from ($ext_if_2:network) tagged EXT_IF_2

pass in on $ext_if reply-to ($ext_if 80.240.209.1) inet proto icmp \
    to ($ext_if) icmp-type echoreq code 0
pass in on $ext_if inet proto icmp from ($ext_if:network) \
    to ($ext_if) icmp-type echoreq code 0
pass in on $ext_if_2 reply-to ($ext_if_2 62.5.188.1) inet proto icmp \
    to ($ext_if_2) icmp-type echoreq code 0
pass in on $ext_if_2 inet proto icmp from ($ext_if_2:network) \
    to ($ext_if_2) icmp-type echoreq code 0

pass in quick on $ext_if reply-to ($ext_if 80.240.209.1) inet proto tcp \
    to $ext_if port ssh modulate state ( max-src-conn 10, max-src-conn-rate 5/120, \
        overload <BRUTEFORCERS> flush global )
pass in quick on $ext_if_2 reply-to ($ext_if_2 62.5.188.1) inet proto tcp \
    to $ext_if_2 port ssh modulate state ( max-src-conn 10, max-src-conn-rate 5/120, \
        overload <BRUTEFORCERS> flush global )

pass in on $ext_if reply-to ($ext_if 80.240.209.1) inet proto tcp \
    to ($ext_if) port { $tcp_svc }
pass in on $ext_if inet proto tcp from ($ext_if:network) \
    to ($ext_if) port { $tcp_svc }
pass in on $ext_if_2 reply-to ($ext_if_2 62.5.188.1) inet proto tcp \
    to ($ext_if_2) port { $tcp_svc }
pass in on $ext_if_2 inet proto tcp from ($ext_if_2:network) \
    to ($ext_if_2) port { $tcp_svc }

pass in on $ext_if reply-to ($ext_if 80.240.209.1) inet proto udp \
    to ($ext_if) port { $udp_svc }
pass in on $ext_if inet proto udp from ($ext_if:network) \
    to ($ext_if) port { $udp_svc }
[b]pass in on $ext_if_2 reply-to ($ext_if_2 62.5.188.1) inet proto udp \
    to $ext_if_2 port { $udp_svc }[/b]
pass in on $ext_if_2 inet proto udp from ($ext_if_2:network) \
    to $ext_if_2 port { $udp_svc }

pass in quick on $int_if route-to ($ext_if_2 62.5.188.1) proto tcp from {192.168.0.74 192.168.0.78 192.168.0.11} to any port smtp
block in log quick on $int_if proto tcp from 192.168.0.0/16 to any port smtp

pass in quick on $int_if route-to ($int_if 192.168.0.74) from <TO_NCPORT> to !192.168.0.0/16 no state
pass in on $int_if proto tcp from $int_if:network to any

pass on $vpn_if

pass in on $int_if_2 proto icmp from 192.168.6.40/32 to any icmp-type echoreq
pass in on $int_if_2 proto udp from 192.168.6.40/32 to any port domain
pass out on $int_if_2
#pass in quick on $int_if route-to ($ext2_if 62.5.188.1) proto tcp from { 192.168.0.11, 192.168.0.74  } to any port smtp
pass on $int_if

надо сразу брать лошадь за рога

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35439
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: pf роутинг

Непрочитанное сообщение Alex Keda » 2009-09-06 23:37:41

юзайте ipfw
Убей их всех! Бог потом рассортирует...

Аватара пользователя
iZEN
ст. лейтенант
Сообщения: 1095
Зарегистрирован: 2007-09-15 16:45:26
Контактная информация:

Re: pf роутинг

Непрочитанное сообщение iZEN » 2009-09-07 9:09:11

"ext_if", "ext_if_2", "vpn_if", "vpn_if_2", "int_if", "int_if_2" — ага, оригинально и со вкусом подобраны названия. :cz2:
Сложно разобраться в каше из пронумерованных алиасов. Накой чёрт вы определяете нумерованные алиасы, если то же самое можно делать с обычными именами интерфейсов? Получается "шило на мыло меняется", не прибавляя смысла. :st:

Имена алиасам нужно давать сообразно задачам, которые они выполняют, а уж нумерации избегать всяческим образом:
"gateway_if", "dmz_if", "local_if", "proxy_if", "vpn_if", "vpn_proxy" и т.д.

А что за адреса: 192.168.7.4, 192.168.0.11, 192.168.0.74, 192.168.0.78, 62.5.188.1, 80.240.209.1, 192.168.6.40/32, 192.168.0.0/16 в тексте правил??? :st:
Что, так трудно и для них придумать алиасы?
GNU/Linux — это не Unix и даже никогда им не был, и, что самое смешное, никогда им не станет — GNU's Not Unix

Аватара пользователя
iZEN
ст. лейтенант
Сообщения: 1095
Зарегистрирован: 2007-09-15 16:45:26
Контактная информация:

Re: pf роутинг

Непрочитанное сообщение iZEN » 2009-09-07 9:10:12

lissyara писал(а):юзайте ipfw
PF круче. :oops:
GNU/Linux — это не Unix и даже никогда им не был, и, что самое смешное, никогда им не станет — GNU's Not Unix

toxic
рядовой
Сообщения: 19
Зарегистрирован: 2008-03-03 23:25:22
Откуда: Ukraine, Sumy
Контактная информация:

Re: pf роутинг

Непрочитанное сообщение toxic » 2009-09-08 11:23:56

VPN использует пртокол GRE не путать с портами

Код: Выделить всё

# cat /etc/protocols  | grep GRE
gre	47	GRE		# Generic Routing Encapsulation
Должно получиться что-то такое

Код: Выделить всё

#GRE
pass in on $wan0_if reply-to ($wan0_if $wan0_gw) inet proto gre to ($wan0_if)
pass in on $wan0_if inet proto gre to ($wan0_if)
pass in on $wan1_if reply-to ($wan1_if $wan1_gw) inet proto gre to ($wan1_if)
pass in on $wan1_if inet proto gre to ($wan1_if)
pass in on $lan0_if inet proto gre from ($lan0_if:network) to ($lan0_if)

toxic
рядовой
Сообщения: 19
Зарегистрирован: 2008-03-03 23:25:22
Откуда: Ukraine, Sumy
Контактная информация:

Re: pf роутинг

Непрочитанное сообщение toxic » 2009-09-08 11:30:10

не вижу смысла в использование no state применяйте проверку маркеров

Аватара пользователя
uHk
мл. сержант
Сообщения: 134
Зарегистрирован: 2008-05-21 15:16:48
Откуда: Москва
Контактная информация:

Re: pf роутинг

Непрочитанное сообщение uHk » 2009-09-08 18:42:23

2 toxic:
1. - поверьте, впн и по портам может работать :roll:
2. - no state ставлю, потому что знаю, что оттуда они никогда не вернутся к этому маршрутизатору
PS: и предложенные правила reply-to не сработают
надо сразу брать лошадь за рога

toxic
рядовой
Сообщения: 19
Зарегистрирован: 2008-03-03 23:25:22
Откуда: Ukraine, Sumy
Контактная информация:

Re: pf роутинг

Непрочитанное сообщение toxic » 2009-09-08 20:20:18

Мой конфиг наодном из серверов все работает. Основа кстати http://www.openbsd.ru/files/etc/pf-dual.conf

Код: Выделить всё

set skip on lo
scrub in

nat-anchor "ng-if/*"
rdr-anchor "ng-if/*"

nat on $wan0_if inet from $vpn0_net -> ($wan0_if:0)
nat on $wan1_if inet from $vpn0_net -> ($wan1_if:0)
nat on $dsl1_if inet from $vpn0_net to ($dsl1_if:network) -> ($dsl1_if:0)

block on { $wan0_if $wan1_if }
block return on { $wan0_if $wan1_if } inet proto tcp

pass out route-to ($wan0_if $wan0_gw) inet from ($wan0_if)
pass out route-to ($wan1_if $wan1_gw) inet from ($wan1_if)
pass out inet from {$wan0_if $wan1_if} to $lan0_net
pass out inet from {$wan0_if $wan1_if} to $vpn0_net
pass quick from $vpn0_net to $vpn0_net

anchor "ng-if/*"

#ICMP
pass in on $wan0_if reply-to ($wan0_if $wan0_gw) inet proto icmp to ($wan0_if) icmp-type echoreq code 0
pass in on $wan0_if inet proto icmp to ($wan0_if) icmp-type echoreq code 0
pass in on $wan1_if reply-to ($wan1_if $wan1_gw) inet proto icmp to ($wan1_if) icmp-type echoreq code 0
pass in on $wan1_if inet proto icmp from ($wan1_if:network) to ($wan1_if) icmp-type echoreq code 0
pass in on $lan0_if inet proto icmp from ($lan0_if:network) to ($lan0_if) icmp-type echoreq code 0
#GRE
pass in on $wan0_if reply-to ($wan0_if $wan0_gw) inet proto gre to ($wan0_if)
pass in on $wan0_if inet proto gre to ($wan0_if)
pass in on $wan1_if reply-to ($wan1_if $wan1_gw) inet proto gre to ($wan1_if)
pass in on $wan1_if inet proto gre from ($wan1_if:network) to ($wan1_if)
pass in on $lan0_if inet proto gre from ($lan0_if:network) to ($lan0_if)
#TCP
pass in on $wan0_if reply-to ($wan0_if $wan0_gw) inet proto tcp to ($wan0_if) port {$wan_tcp_svc}
pass in on $wan0_if inet proto tcp to ($wan0_if) port {$wan_tcp_svc}
pass in on $wan1_if reply-to ($wan1_if $wan1_gw) inet proto tcp to ($wan1_if) port {$wan_tcp_svc}
pass in on $wan1_if inet proto tcp from ($wan1_if:network) to ($wan1_if) port {$wan_tcp_svc}
pass in on $lan0_if inet proto tcp from ($lan0_if:network) to ($lan0_if) port {$lan_tcp_svc}
#UDP
pass in on $wan0_if reply-to ($wan0_if $wan0_gw) inet proto udp to ($wan0_if) port {$wan_udp_svc}
pass in on $wan0_if inet proto udp to ($wan0_if) port {$wan_udp_svc}
pass in on $wan1_if reply-to ($wan1_if $wan1_gw) inet proto udp to ($wan1_if) port {$wan_udp_svc}
pass in on $wan1_if inet proto udp from ($wan1_if:network) to ($wan1_if) port {$wan_udp_svc}
pass in on $lan0_if inet proto udp from ($lan0_if:network) to ($lan0_if) port {$lan_udp_svc}

Да и че там anchor творитса

Код: Выделить всё

# pfctl -a /ng-if/user -sn 
nat on ng0 all tagged WAN_USER_RDR -> (ng0:0)
rdr on rl1 inet proto tcp from any to (rl1) port = utorrent tag WAN_USER_LAN -> 192.168.111.111
rdr pass on ng0 inet proto tcp from any to 192.168.2.254 port = utorrent tag WAN_USER_RDR -> 192.168.111.111

# pfctl -a /ng-if/user -sr
pass in quick all flags S/SA keep state tagged WAN_USER_LAN
pass in quick reply-to (rl1 192.168.2.1) inet all flags S/SA keep state tagged WAN_USER_LAN
pass in quick route-to (rl1 192.168.2.1) inet from 192.168.111.111 to any flags S/SA keep state


toxic
рядовой
Сообщения: 19
Зарегистрирован: 2008-03-03 23:25:22
Откуда: Ukraine, Sumy
Контактная информация:

Re: pf роутинг

Непрочитанное сообщение toxic » 2009-09-08 20:56:27

Извини действительно OpenVPN использует только UDP и TCP а не GRE
GRE єто для PPTP а ESP и AH для IPSec