Исходные данные о сетевой инфраструктуре
Небольшая внутриквартирная домашняя сеть. Шлюз в сеть интернет организован с помощью операционной системы OpenBSD, развёрнутой на оборудовании 9 летней давности. Подключение к интернету осуществляется через Ethernet, провайдер по dhcp выдаёт реальный ip адрес.Цель работ
Приблизить построенный шлюз к коробочным решениям.Обеспечить автоматический проброс tcp и udp портов с внешнего ip адреса на внутренние адреса.
Способ достижения цели
На шлюзе поднимается служба, которая обслуживает запросы клиентского программного обеспечения (utorret, Miranda, Opera, ...) по протоколам UPnP и NAT-PMP. Служба автоматически формирует правило rdr для пакетного фильтра pf OpenBSD.Решение
Используем демон miniupnpd, реализующий в системах *nix службу UPnP и NAT-PMP.Так как в бинарных пакетах и портах эта программа отсутствует, то будем собирать из исходных текстов.
- Скачиваем и распаковываем последний дистрибутив исходных кодов с сайта автора. Поместим распакованный дистрибутив в локальный репозиторий исходных кодов, т.к. он нам может понадобиться при обновлении системы.
$ cd /tmp
$ wget http://miniupnp.free.fr/files/download.php?file=miniupnpd-20090904.tar.gz
$ tar xzf miniupnpd-20090904.tar.gz
$ mv miniupnpd-20090904/ /usr/src/miniupnpd
- Устанавливаем из коллекции бинарных пакетов набор утилит для генерации uuid
$ sudo pkg_add -vi uuid
- Запускаем скрипт генерации файла настроек
$ cd /usr/src/miniupnpd
$ ./genconfig.sh
Раcкомментируем строку #define PF_ENABLE_FILTER_RULES в конфигурационном файле config.h, разрешая тем самым генерацию дополнительных правил в пакетном фильтре (понадобятся для QoS или дополнительной фильтрации).
Компилируем и устанавливаем службу в систему
$ make
$ sudo make install
Служба установилась в систему. Конфигурация службы осуществляется через файл настроек /etc/miniupnpd.conf
Вносим изменения в соответствии с окружением системы:
ext_ifname=vr0
listening_ip=192.168.0.1/24
listening_ip=192.168.1.1/24
enable_natpmp=yes
enable_upnp=yes
bitrate_up=3000000
bitrate_down=3000000
# Очередь QoS, в которую помещаем пакеты для пробрасываемых соединений
queue=main_torrent
Добавляем новые цепочки правил в pf.conf (сразу же после аналогичных строк)
rdr-anchor "miniupnpd"
anchor "miniupnpd"
Тестируем конфигурацию пакетного фильтра:
$ sudo pfctl -nf /etc/pf.conf
..., и если без ошибок, то применяем правила
$ sudo pfctl -f /etc/pf.conf
Тестируем службу в отладочном режиме:
$ sudo miniupnpd -d
Клиенты должны обратиться к серверу и в списке правил должны появиться подобные записи:
$ sudo pfctl -a miniupnpd -sr
pass in quick on vr0 inet proto tcp from any to any port = 29605 flags S/SA keep state label "uTorrent (TCP)" queue main_torrent
pass in quick on vr0 inet proto udp from any to any port = 29605 flags S/SA keep state label "uTorrent (UDP)" queue main_torrent
$ sudo pfctl -a miniupnpd -sn
rdr on vr0 inet proto tcp from any to any port = 29605 label "uTorrent (TCP)" -> 192.168.0.70 port 29605
rdr on vr0 inet proto udp from any to any port = 29605 label "uTorrent (UDP)" -> 192.168.0.70 port 29605
Если всё нормально и клиент получают адреса, то добавляем службу в автозапуск. Добавляем следующие параметры вызова (на будущее) в конец файла /etc/rc.conf.local
miniupnpd_flags="" #assign NO to disable service, for normal use ""
Настраиваем локальный файл загрузки
if [ X"${miniupnpd_flags}" != X"NO" -a -x /sbin/miniupnpd ]; then
echo -n ' miniupnpd'; /sbin/miniupnpd ${miniupnpd_flags}
fi
Заключение
Итак, мы настроили на домашнем маршрутизаторе службу UPnP и позволили внутренним компьютерам автоматически публиковаться в интернете.В версии 4.7 OpenBSD должны произойти существенные изменения в синтаксисе правил nat и rdr. Эти изменения облегчат работу администраторам OpenBSD и позволят строить более гибкие списки правил для пакетного фильтра. Ну что же, поживём — увидим.
Комментариев нет:
Отправить комментарий