3 внешние сети, 1 внутренняя через PF

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Saver
рядовой
Сообщения: 45
Зарегистрирован: 2009-10-22 11:16:02
Откуда: Vidnoe

3 внешние сети, 1 внутренняя через PF

Непрочитанное сообщение Saver » 2010-05-31 13:51:30

Доброго всем времени суток!

Ситуация следующая:
Имеем маленький сервачек под FreeBSD 8.0-RELEASE-p2, в нем стоит 1 встроенная сетевуха, 2 PCI и 1 Wi-Fi. Встроенная сетевуха - внутренняя сеть, все остальное - это внешние интерфейсы. С одной сетевухи и с Wi-Fi мы забираем инет и ещё одна сетевуха - это отдельная сетка без инета с необходимыми нам ресурсами, там нет шлюза, простая сеть.
Короче, последней сетевухи не было раньше, просто недавно появилась потребность ещё в одно сети, вот тогда и появилась эта сетевуха. До этого этот сервак служил нам только для того, чтобы забирать необходимые порты из инета через медь, а остальное через WiFi, теперь нужно ещё иметь доступ к ещё одной сети, но вот че-то не получается перекидывать пакеты туда.

Блин, наверное непонятно объяснил, ща по конфигу понятнее будет. Кое-где я буду в коде комментировать

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

### Makros ###

ext_if="xl0" -внешняя сетевуха

int_if="bge0" - внутренная сетевуха

pci_if="re0" - дополнительная сеть

wlan="wlan0" - виртуальная беспроводная сетевуха

vpn_if="tun0" - виртуальная сетевуха OpenVPN

vpn2_if="tun1" - виртуальная сетевуха OpenVPN

int_lan="192.168.10.0/24" - внутренняя сеть

pci_lan="192.168.100.0/24" - дополнительная сеть

pci_ip="192.168.100.193" - адрес в дополнительной сети

int_ip="192.168.10.1" - внутренний адрес

ext_gw="192.168.2.1" - "медный" шлюз

wlan_gw="10.0.98.1" - "вайфайный" шлюз

ath="ath0" - физическая беспроводная сетевуха

allow_ports="{ 43, 53, 80, 137, 138, 139, 443, 445 }" - порты, которые идут через "медь"

allowed_icmp_types="{ echoreq, unreach }"


### GLOBAL OPTIONS ###

set block-policy drop

set skip on lo0

set timeout { frag 10, tcp.established 3600 }

scrub in all fragment reassemble


### Port Forwarding & NAT ###

nat on $wlan from $int_lan to any -> ($wlan)

nat on $ext_if from $int_lan to any -> $ext_if

nat on $pci_if from $int_lan to any -> ($pci_if) - предполагаю, что нат нам нужен в дополнительной сети

### Rules of PACKET FILTER ###

antispoof quick for { $wlan, $int_if, lo0, $vpn_if, $vpn2_if, $ext_if, $pci_if }

block all


### Everything Local ###

pass out on $pci_if from $pci_if to any keep state - разрешаем все исходящие на сетевухи для дополнительной сети

pass out on $wlan from ($wlan) to any keep state

pass out on $ext_if from $ext_if to any keep state

pass out on $ext_if proto gre from ($ext_if) to any

pass in quick on $int_if from $int_lan to $int_if


### Everything for Int LAN ###

pass out on $ext_if from $int_lan to any keep state

pass out on $wlan from $int_lan to any keep state

pass out on $pci_if from $int_lan to any keep state - разрешаем все исходящие из внутренней сети в дополнительную сеть


### Route ### - дальше идут правила маршрутизации и вот я думаю как бы сюда вклиниться, что бы и это все работало (сейчас все работает) и заработала дополнительная сеть

pass out on $wlan route-to ($ext_if $ext_gw) from $ext_if to any
pass out on $ext_if route-to ($wlan $wlan_gw) from ($wlan) to any

pass in on $int_if route-to { ($ext_if $ext_gw), ($wlan $wlan_gw) } round-robin proto { tcp, udp, icmp } from $int_lan to any

pass in quick on $int_if route-to ($ext_if $ext_gw) inet proto { tcp, udp } from $int_lan to any port $allow_ports


pass quick on $ath

pass quick on $int_if


### Everything for OpenVPN ###

pass quick on $vpn_if

pass quick on $vpn2_if


### ICMP ###

pass log inet proto icmp all icmp-type $allowed_icmp_types

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

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

route -p add 192.168.100.0 mask 255.255.255.0 192.168.10.1
т.е. хочу идти в 192.168.100.0 через мой дефолтный шлюз.

Люди, хэлп!!!

Хостинговая компания 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
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: 3 внешние сети, 1 внутренняя через PF

Непрочитанное сообщение Alex Keda » 2010-10-03 18:46:01

нифига не понял чё вы хотите...
Убей их всех! Бог потом рассортирует...

Saver
рядовой
Сообщения: 45
Зарегистрирован: 2009-10-22 11:16:02
Откуда: Vidnoe

Re: 3 внешние сети, 1 внутренняя через PF

Непрочитанное сообщение Saver » 2011-01-14 13:55:22

Заметил одну странную вещь - как только я пишу здесь сообщение о своей проблеме, так через какое-то время я её сам и решаю.

Я не буду переписывать весь конфиг, просто напишу, чего я добавил, чтобы все заработало

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

pass in quick on $int_if route-to $pci_if inet proto tcp from $int_lan to $pci_lan port 80

pass in quick on $int_if route-to $pci_if inet proto tcp from $int_lan to $pci_lan port 443
Тут вроде понятно, что все приходящие на внутренний интерфейс пакеты адресованные на нужную нам сеть по портам 80 и 443 перекидывать на нужный интерфейс

Ну и заодно опишу ещё одну тему, тоже над ней думал некоторое время, не получилось, забил и через какое-то время пришло озарение. Хотя тема элементарная, но че-то я застопился...

Значит надо попасть в сеть, к которой (в отличии от вышеуказанной) этот комп не был подключен напрямую. Зная через какую сеть можно попасть в нужную нам и зная её гейт (если только это не гейт по умолчанию), можно легко и непринужденно попасть туда.

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

pass in quick on $int_if route-to ($pci_if $pci_gw) inet proto tcp from $int_lan to $enigma_lan port 80

pass in quick on $int_if route-to ($pci_if $pci_gw) inet proto tcp from $int_lan to $enigma_lan port 443
Вкратце объясняю - все пакеты пришедшие на внутренний интерфейс, адресованные в сеть enigma_lan по портам 80 и 443 отсылаем через pci_if на гейт pci_gw.


З.Ы. Можно вместо двух правил использовать одно в обоих случаях, но мне нравится так.