LINUX.ORG.RU
ФорумAdmin

FreeBSD доступ к внутренним ресурсам

 , ,


0

1

Здравствуйте. Захотел я испробовать FreeBSD дома в качестве (внезапно) роутера. Имеется 2 карты - внешняя msk0, смотрящая в провайдера с белым IP, и внутренняя rl0, смотрящая в локалку (192.168.1.0/24). Настроил DHCP, DNS в самой простой роли, natd и проброс портов. В домашней сети есть веб-сервачок, к нему я и прокинул 80 порт. Снаружи всё работает как надо - захожу по доменному имени, попадаю на сервак. А вот изнутри локалки зайти также не получается. Телнет на 80-й порт не проходит, хотя хост пингуется. Не могу понять, копать в сторону фаервола, ната или маршрутизации (с этим туго). Вот конфиги:

# cat /etc/rc.conf

hostname="gate"
keymap="ru.koi8-r.win.kbd"
ifconfig_msk0="ether 11:22:33:44:55:66 DHCP"
dhcpd_enable="YES"
dhcpd_flags="-q -4"
dhcpd_conf="/usr/local/etc/dhcpd.conf"
dhcpd_ifaces="rl0"
dhcpd_withuser="dhcpd"
dhcpd_withgroup="dhcpd"
dhcpd_chuser_enable="YES"
dhcpd_chroot_enable="YES"
dhcpd_devfs_enable="YES"
dhcpd_rootdir="/var/db/dhcpd"
ifconfig_rl0="inet 192.168.1.1  netmask 255.255.255.0"
firewall_enable="YES"
firewall_script="/etc/rc.myfirewall"
gateway_enable="YES"
natd_enable="YES"
natd_flags="-f /etc/natd.conf"
sshd_enable="YES"
ntpd_enable="YES"
powerd_enable="YES"
named_enable="YES"
named_auto_forward="YES"
# cat /etc/natd.conf

interface msk0
log yes
log_denied no
use_sockets yes
same_ports yes
unregistered_only yes
dynamic yes
redirect_port   tcp     192.168.1.12:80     80
Фаервол пока открытый:
# cat /etc/rc.myfirewall

#!/bin/sh
fwcmd="/sbin/ipfw -q"
extif="msk0"
intif="rl0"
localnet="192.168.1.0/24"
${fwcmd} -f flush
${fwcmd} add 100 divert natd ip from any to any via ${extif}
${fwcmd} add allow ip from any to any
# ifconfig

msk0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=c011b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,TSO4,VLAN_HWTSO,LINKSTATE>
        ether 11:22:33:44:55:66
        inet 11.22.33.44 netmask 0xffffff00 broadcast 11.22.33.255
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=2008<VLAN_MTU,WOL_MAGIC>
        ether aa:bb:cc:dd:ee:ff
        inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255
        inet6 ad80::231:28ff:feca:7f86%rl0 prefixlen 64 scopeid 0x8
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
plip0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> metric 0 mtu 1500
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
ipfw0: flags=8801<UP,SIMPLEX,MULTICAST> metric 0 mtu 65536
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
        inet6 ::1 prefixlen 128
        inet6 fe70::1%lo0 prefixlen 64 scopeid 0xb
        inet 127.0.0.1 netmask 0xff000000
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
Буду признателен за любую помощь. Спасибо.

Лупбэк. Не все точки доступа поддерживают.

IPR ★★★★★ ()

Во-первых, зачем использовать natd, если давно есть ядерный nat?

Во-вторых, IP — свойство хоста, и трафик изнутри сети к белому адресу не ходит через внешний интерфейс.

В-третьих, зачем вообще изнутри сети ходить на сервер через бордер? Настрой DNS.

baka-kun ★★★★★ ()
Ответ на: комментарий от beastie

Спасибо, это то, что нужно. Почему-то в руководстве по FreeBSD этого не нашёл.

rwrwrw ()
Ответ на: комментарий от baka-kun

Про ядерный nat не слышал, спрашивал у нашего админа на работе, он natd использует на шлюзе. Про ДНС не подумал, попробую и через него тоже. Просто до этого стоял обычный роутер TP-LINK TL-WR741ND, я хотел для начала достичь его простого функционала, так вот с ним при той же ситуации с пробросами, описанной проблемы не возникало, видимо, он сам как-то организует этот доступ к внутренним ресурсам через внешний адрес.

rwrwrw ()
fwcmd="/sbin/ipfw -q"
extif="msk0"
intif="rl0"
localnet="192.168.1.0/24"
${fwcmd} -f flush
${fwcmd} add 100 divert natd ip from any to any
${fwcmd} add allow ip from any to any
hizel ★★★★★ ()
Ответ на: комментарий от rwrwrw

Чёрт побери, как всё просто

Да, теперь в natd попадает не только бегающий через внешний интерфейс трафик.

Теперь у тебя каждый пакет, а транзитный не по одному разу, вызывает переключение контекста в юзерспейсный natd и возвращение в ядро.

Про ядерный nat не слышал

man ipfw

# ipfw nat 123 config ip msk0 log reset same_ports unreg_only \
               redirect_port tcp 192.168.1.12:80 80
# ipfw add 100 nat 123 ip from any to any

Но я бы написал два конфига: для редиректа отдельно, ната серой сети отдельно. И соответственно закидывал бы в них пакеты:

ipfw add nat 1 ip from any to me 80 in
ipfw add nat 1 ip from 192.168.1.12 80 to any
…
ipfw add nat 2 ip from any to not me in via ${extif}
ipfw add nat 2 ip from 192.168.1.0/24 to any out via ${extif}

Про ДНС не подумал

Нелогично гонять пакеты к внутренним ресурсам и обратно через пограничный маршрутизатор и nat. Поэтому DNS настраивается так, чтобы своим отдавать внутренний адрес, а остальному миру — внешний.

baka-kun ★★★★★ ()
Ответ на: комментарий от hizel

Это imho без разницы. Там хотя бы описано, почему оно так. А потом уже можно и на ipfw или iptables перекладывать.

beastie ★★★★★ ()
Ответ на: комментарий от beastie

Это imho без разницы

Да, согласен, там описан иманно мой случай и пути его решения, хоть и для pf.

rwrwrw ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.