Здравствуйте уважаемые знатоки!
Сразу предупреждаю, что в Никсах я новичок, так што попрошу ногами не пинать:-)
Есть желание использовать в качестве шлюза в Инет для небольшой локальной сети слабенький комп с OpenBSD 3.6. У меня выделенка по ADSL (не PPPOE, а статический IP - от ADSL модема - ethernet). То есть коннект с провайдером устанавливать не надо - включил модем и он уже есть. Прежде чем задать вопрос, опишу подробно свои действия.
1.Излазил вдоль и поперёк сайт www.openbsd.org. Распечатал оттуда маны и факи по установке OpenBSD 3.6 и настройке её в качестве роутера и файрволла.
2.Скачал себе дистрибут.
3.Создал из образа cdrom36.fs загрузочный диск. На другой CD залил файлы из папки i386 и папку packages/i386/ (с дистрибутом Midnight Commander, связанных с ним прог и ещё несколько десятков прог в дистрибутах, которые, как мне показалось, могут пригодиться в будущем), а также архив ports.tar.gz.
4. Загрузился с загрузочного CD.
5. Установил с него (всё по умолчанию,все стандартные пакеты, используя весь свой жёсткий диск) OpenBSD 3.6. Когда понадобились дистрибутивные файлы, подсунул второй CD-диск и указал системе CD-ROM в качестве носителя дистрибутива. В ходе установки сделал необходимые настройки сети: задал сетевым интерфейсам IP адреса, прописал IP адреса внешних (на стороне провайдера) шлюза, первичного и вторичного DNS-серверов.
6. Перезагрузился со своего жёсткого диска.
7. Создал пользователя. Далее всё делал от имени этого пользователя с применением режима su.
8. Установил Midnight Commander. Настроил в нём кнопки.
9. Включил маршрутизацию, добавив в файл /etc/sysctl.conf строчку:
net.inet.ip.forwarding=1
10. Активировал пакетный фильтр, исправив строчку:
pf=NO
на
pf=YES
в файле /etc/rc.conf
11.Скопировал один из примеров, взятых с www.openbsd.org и форума: www.bsdforums.com в свой файл /etc/pf.conf.
12. Перезагрузился...
И вот тут, собственно, начались проблемы.
При загрузке выдаётся сообщение о наличии в последней строке моего /etc/pf.conf файла синтаксической ошибки:
pf.conf:33:Syntax error
Syntax error pf rules not loaded
Эта строка выглядит так:
pass out on $ext_if proto { udp, icmp } all keep state
она, я так понимаю, позволяет udp и icmp пакетам покидать мой внешний интерфейс и улетать в Инет.
У меня есть несколько примеров pf.conf файлов и во всех примерах эта строка выглядит абсолютно одинаковой!
Задавал вопрос в форум www.bsdforums.com, постил туда свой pf.conf файл.
Один парень оттуда проверял мой файл на своём компе (команда: #pfctl -vvnf /etc/pf.conf). Его OpenBSD 3.6 ошибки в моём файле не нашла!
А я, для сравнения, поставил (всё точно также, как описано выше) OpenBSD 3.6 ещё на один комп и... получил абсолютно такой же результат:-((
Пробовал вариации последней строки:
pass out on $ext_if proto udp all keep state
pass out on $ext_if proto icmp all keep state
и так:
pass out on $ext_if proto udp all keep state
и так:
pass out on $ext_if proto icmp all keep state
Всё равно выдаёт ошибку.
Если заремить последнюю строку, ошибки нет.
В случае, когда пакетные фильтры не загружены имеем следующую картину:
на компе с openbsd 3.6 Инет есть, хосты в локальной сети и в Инете пингуются и по IP-адресам и по именам. С других компов локальной сети пинги дальше внешнего интерфейса компа с OpenBSD не проходят. Инета на этих компах локальной сети нет.
В случае, когда pf.conf файл загружен с заремленной последней строкой пинги не идут дальше внешнего интерфейса компа с openbsd 3.6 и с самого этого компа.
Пробовал убирать из файла pf.conf все правила, касающиеся фильтрации пакетов, оставляя только определения внешнего и внутреннего интерфейсов и правило для NAT, чтобы заставить Openbsd работать лишь в качестве маршрутизатора (чтобы всё в обе стороны пропускала без какой-либо фильтрации). Результаты абсолютно те же:-((( С компов локальной сети пинги в Инет не идут и Инета на них нет:-(((Что надо ещё сделать, чтобы заставить работать OpenBSD 3.6 роутером и файрволлом?!!! Никаких сервисов я пока запускать не планирую. Только пускать локальных юзеров в Инет и защищать локальную сеть от вторжений из Инета.
Помогите!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Вот мой pf.conf файл:
-------------------------------------------------------------------------
# macros
int_if = "ne3"
ext_if = "de0"tcp_services = "{ 22, 113 }"
icmp_types = "echoreq"priv_nets = "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8 }"
#Internal web-server
#comp3 = "192.168.0.3"# options
set block-policy return
set loginterface $ext_if# scrub
scrub in all# nat/rdr
nat on $ext_if from $int_if:network to any -> ($ext_if)
rdr on $int_if proto tcp from any to any port 21 -> 127.0.0.1 \
port 8021#rdr for internal web-server
#rdr on $ext_if proto tcp from any to any port 80 -> $comp3# filter rules
block allpass quick on lo0 all
block drop in quick on $ext_if from $priv_nets to any
block drop out quick on $ext_if from any to $priv_netspass in on $ext_if inet proto tcp from any to ($ext_if) \
port $tcp_services flags S/SA keep state#pass for internal web-server
#pass in on $ext_if proto tcp from any to $comp3 port 80 \
flags S/SA synproxy statepass in on $ext_if inet proto tcp from port 20 to ($ext_if) \
user proxy flags S/SA keep statepass in inet proto icmp all icmp-type $icmp_types keep state
pass in on $int_if from $int_if:network to any keep state
pass out on $int_if from any to $int_if:network keep statepass out on $ext_if proto tcp all modulate state flags S/SA
pass out on $ext_if proto { udp, icmp } all keep state
------------------------------------------------------------------------
В этом конфиге была предусмотрена возможность запуска www-сервера, доступного из Инета, в локальной сети на comp3. Но поскольку мне никаких сервисов, доступных извне запускать пока не надо, я всё, что касается comp3 заремил...
Порты, обновления, патчи я не устанавливал.
Папка /usr/ports у меня отсутствует.
Мож в этом грабли?!
Ну памагите чайнику!!!
по идее минимальная функциональность NAT должна работать с таким pf.conf:#begin of pf.conf
int_if = "ne3"
ext_if = "de0"nat on $ext_if from $int_if:network to any -> ($ext_if)
pass all
#end of pf.conf(если, конечно, ne3 и de0 - это реальные имена интерфейсов, и они верно сконфигурированы)
если такая конфигурация работает - переходи к более сложным. Брать целиком чужой конфиг для pf ИМХО плохая идея. Добавляй по строчке - и тестируй.
записи типа $int_if:network я никогда не тестировал - можно попробовать его заменить явным указанием адреса сети (типа 192.168.1.0/24) - или даже словом any - как это по умолчанию делают во FreeBSD ipfw.
Покажи вывод команды
netstat -r
Проблему с синтаксической ошибкой в pf.conf неожиданно решил!!!:-)
Спасибо az!
Оказывается правило не должно быть последней строкой в файле pf.conf.
Последней строкой в этом файле может быть любая ремарка (даже матерная:-))
Добавил в конец своего pf.conf файла строку:
#end of pf.conf
И pfctl перестал находить какие-либо ошибки. Так что теперь мой pf.conf грузится без проблем!
Однако проблема с маршрутизацией осталась в прежнем состоянии. Т.е. системе абсолютно по фигу загружен pf.conf или нет и что в нём написано. Ситуация такая: с OpenBSD 3.6 компа пингуется и Инет и локальная сеть. Интернет на этом компе работает. Со всех других компов локальной сети Инет не работает, а пинги доходят только до внешнего интерфейса OpenBSD 3.6 компа.Так что вопрос _Ale_ задан в нужном направлении!
>Покажи вывод команды
>netstat -rУ меня такое ощущение, что какого-то маршрута в таблице маршрутизации не хватает. Дело в том, что у меня Интернет-линия одна на всех в конторе. На Windows 2000 server у меня всё настроено и давно работает. Я не могу всю контору на целый день без Инета оставить, по этому для экспериментов с OpenBSD перетыкаю от Windows 2000 server шнурок время от времени. А ведь OpenBSD считывает данные для построения таблицы маршрутизации с интерфейсов при каждой перезагрузке? Вобщем мне надо ручками прописать таблицу маршрутизации и сохранить её...
Показываю, что имею на теперешний момент.
Смотрите и подсказывайте, плииз, что нужно добавить:-------------------------------------------------------------------------
Routing tables
Destination Gateway Flags Refs Use Mtu Interface
localhost localhost UH 0 0 33224 lo0
192.168.0/24 link#1 UC 0 0 - ne3
192.168.0.16 00:90:f5:03:ba:19 UHLc 0 4 - ne3
a.b.c/24 link#2 UC 0 0 - de0
-------------------------------------------------------------------------a.b.c.d - мой внешний IP
т.е. a.b.c/24 - сетка моего провайдера штоли?
ne3 - мой внутренний интерфейс (смотрит на локальную сеть)
de0 - внешний интерфейс (смотрит на Интернет)
192.168.0.16 - IP-адресс компа в локальной сети (по-моему, лишний маршрут?)
Интересно, а куда подевался default gateway???
>Интересно, а куда подевался default gateway???
вдогонку...
что у вас в /etc/mygate ???
>>Интересно, а куда подевался default gateway???
>вдогонку...
>что у вас в /etc/mygate ???В /etc/maygate у меня одна единственная строчка:
a.b.c.fЭто IP-адрес внешнего (на стороне провайдера) шлюза
мой реальный внешний IP: a.b.c.d
Добавлял вручную в таблицу маршрутизации:
#route add default a.b.c.d
Не помогло:-(
>Добавлял вручную в таблицу маршрутизации:
>#route add default a.b.c.dСорри!
Добавлял в таблицу маршрутизации:
#route add default a.b.c.fa.b.c.f - IP адрес внешнего шлюза
Спасибо всем!!!
Проблема решена!!!
Включил маршрутизацию IPV6, добавив строчку:
net.inet6.ip6.forwarding=1
в файле /etc/sysctl.conf
И всё заработало!Пока использую один из готовых примеров pf.conf, взятых из Инета.
По мере изучения буду свой pf.conf ваять, IMHO, это процесс творческий и бесконечный:-)