Код: Выделить всё
rt.daycom.ru /etc# ifconfig
vr0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=8<VLAN_MTU>
inet 17.106.95.90 netmask 0xfffffff8 broadcast 17.106.95.95
inet 17.106.95.91 netmask 0xfffffff8 broadcast 17.106.95.95
ether 00:19:5b:83:60:e0
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
vr1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=8<VLAN_MTU>
inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
inet 10.0.0.2 netmask 0xffffff00 broadcast 10.0.0.255
ether 00:1c:f0:0b:b0:e9
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
vr2: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=8<VLAN_MTU>
inet 192.168.1.2 netmask 0xffffff00 broadcast 192.168.1.255
ether 00:19:21:56:a4:61
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
plip0: flags=108810<POINTOPOINT,SIMPLEX,MULTICAST,NEEDSGIANT> mtu 1500
pfsync0: flags=0<> mtu 2020
syncpeer: 224.0.0.240 maxupd: 128
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x6
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33208
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.1 --> 192.168.2.2 netmask 0xffffffff
Opened by PID 1140
настроен файрвол, который всех кто хочет попасть из инета во внутрь пропускает по vr0, все исходящие идут через vr2.
Код: Выделить всё
rt.daycom.ru /etc# cat /etc/pf.conf
#Внешние и внутренний интерфейсы.
#
ext_if_a = "vr0" #первый провайдер
ext_if_b = "vr2" #второй провайдер
int_if = "vr1" #локалка
#Шлюзы для каналов.
#
ext_gw_a = "17.106.95.89" #для первого провайдера
ext_gw_b = "192.168.1.1" #для второго провайдера
net = "192.168.0.0/24" #локалка
#TCP/UDP сервисы, обслуживаемые маршрутизатором, то к чему имеется доступ на внешних интерфейсах
#
tcp_svc = "domain, auth, http, ntp" #как пример, что то нужно вписать иначе будет биг ошибка :)
udp_svc = "domain, ntp, 1194" #аналогично, 1194 - vpn
# Из интернета на почтовый сервер
tcp_mail ="smtp, pop3"
# закрытые порты из внутренней сети в интернет
tcp_block_int ="smtp"
mail_server ="17.106.95.91"
router ="17.106.95.90"
#Натим, важный момент, именно тут определяется кого куда пускать
#Синтаксис ната, грубо говоря, таков: nat on _интерфейс_ from _откуда_ to _куда_ -> _интерфейс_или_ип_адрес
#
#nat on $ext_if_a from {$net} -> ($ext_if_a:0)
nat on $ext_if_b from {$net} -> ($ext_if_b:0)
# Пробрасываем порты из внутренней сети на SQUID
#
rdr pass on $int_if proto tcp to port http -> 127.0.0.1 port 3128
#Разрешаем сети ходить в интернет, всё остальное блокируем
#
block in on { $ext_if_a $ext_if_b }
block return-rst in on { $ext_if_a $ext_if_b } proto tcp
pass out on { $ext_if_a $ext_if_b } keep state
#Исходящие пакеты в канал, соответствующий адресу источника. Здесь и начинается policy
#
pass out route-to ($ext_if_a $ext_gw_a) from ($ext_if_a) to !(self:network) keep state
pass out route-to ($ext_if_b $ext_gw_b) from ($ext_if_b) to !(self:network) keep state
#А вот policy для входящих пакетов на внешние интерфейсы
#
pass in on $ext_if_a reply-to ($ext_if_a $ext_gw_a) proto udp to $router port { $udp_svc } keep state
pass in on $ext_if_a proto udp from any to $router port { $udp_svc } keep state
#pass in on $ext_if_a proto udp from ($ext_if_a:network) to $router port { $udp_svc } keep state
#
pass in on $ext_if_a reply-to ($ext_if_a $ext_gw_a) proto tcp to port { $tcp_svc } flags S/SA keep state
pass in on $ext_if_a proto tcp from ($ext_if_a:network) to port { $tcp_svc } flags S/SA keep state
#
pass in on $ext_if_a reply-to ($ext_if_a $ext_gw_a) proto icmp to $router keep state
pass in on $ext_if_a proto icmp from ($ext_if_a:network) to $router keep state
# Пускаем почту на почтовый сервер
#
pass in on $ext_if_a reply-to ($ext_if_a $ext_gw_a) proto tcp to $mail_server port { $tcp_mail } flags S/SA keep state
pass in on $ext_if_a proto tcp from ($ext_if_a:network) to $mail_server port { $tcp_mail } flags S/SA keep state
#
pass in on $ext_if_b reply-to ($ext_if_b $ext_gw_b) proto udp to port { $udp_svc } keep state
pass in on $ext_if_b proto udp from any to port { $udp_svc } keep state
#pass in on $ext_if_b proto udp from ($ext_if_b:network) to port { $udp_svc } keep state
#
pass in on $ext_if_b reply-to ($ext_if_b $ext_gw_b) proto tcp to port { $tcp_svc } flags S/SA keep state
pass in on $ext_if_b proto tcp from ($ext_if_b:network) to port { $tcp_svc } flags S/SA keep state
Буду благодарен за любые предложения, пожелания.