Нет выхода в интернет с локалки IPFW+kernel_NAT+DHCPD
Добавлено: 2015-06-07 14:33:37
Собственно возник один вопрос по поводу настройки сервера на базе FreeBSD 10.1 release в качестве шлюза для выхода в интернет.
Что-то очень похожее на обычный роутер, который раздает интернет по квартире, только со всеми прелестями и возможностями FreeBSD.
Конкретней по вопросу.
Поднял тестовый сервер на базе FreeBSD (установлено три физические сетевые карточки. Одна смотрит в "мир" (статический IP выданный провайдером 192.168.4.42), две другие образуют две локальные подсети), пересобрал ядро со всеми необходимыми опциями, настроил две локальные подсети с раздачей адресов с помощью DHCP сервера, настроил bind9, самая базовая тестовая настройка IPFW, настроен NAT.
Что имею сейчас:
1. Сам маршрутизатор-сервер подключен к сети 192.168.0.0/16 и нормально выходит в глобальный интернет, скачивает/закачивает.
2. Раздает на две независимые локальные подсети (одна подсеть 10.1.0.0/16, другая подсеть 10.2.0.0/16) через DHCP сетевые адреса. При этом компьютеры в автоматическом режиме получают все нужные сетевые настройки, а сам сервер автоматически перенаправляет DNS в нужную сторону (шлюз провайдера 192.168.1.210)
3. Компьютеры нормально пингуются и общаются друг с другом внутри всей этой системы, как между локальными подсетями, так и с самим сервером и обратно.
4. НО, вот проблема, сам сервер в интернет выходит без проблем, а с локальных подсетей не выпускает. Не могу разобраться в чем причина.
Фаервол настроен пока в тестовом режиме на сквозное пропускание трафика, никаких ошибок или блокировок в логах нет.
Видится мне проблема либо в каких то не верных настройках IPFW kernel-NAT, либо ошибка в маршрутах..
Из локальных подсетей компьютеры не выпускает в интернет даже если вручную в них прописать предпочтительный DNS нашей сети 192.168.1.210
Ядро пересобрано с опциями:
===========================
Вот настройки собственно сервера:
по команде ifconfig
====================
/etc/rc.conf
===========
далее содержимое других конфигов...
/etc/resolv.conf
==============
/etc/sysctl.conf
==============
/usr/local/etc/namedb/named.conf
==============================
содержимое /usr/local/etc/namedb/auto_forward.conf
================================================
содержимое /usr/local/etc/dhcpd.conf
===================================
Содержимое /etc/ipfw.conf пока чисто в тестовом режиме, чтобы проверить работу сервера в целом..
Основные нужные мне переменные задал сразу, но пока большинство их не использую.
Права на файл выданы правильно, включая на выполнение.
При запуске фаервола никаких ошибок нет, все внесенные правила отображаются по команде ipfw show
============================
Отображение по команде netstat
==============================
Проблема в том, что локалки пингуются друг с другом в обе стороны и с самим сервером и обратно.
Сам сервер в интернет выходит, скачивает/закачивает.
Сервер DHCP нормально раздает адреса, компьютеры нормально получают в автоматическом режиме настройки.
НО, вот с подсетей выйти в интернет нельзя.
Пожалуйста, ткните носом, где проблема.
Сам думаю, скорее всего либо в маршрутах, либо не верно работает NAT
Уже перерыл 100500 статей и столько же вариантов.
Результат один и тот же. Сервер в инет выходит, а локалки нет.
Что-то очень похожее на обычный роутер, который раздает интернет по квартире, только со всеми прелестями и возможностями FreeBSD.
Конкретней по вопросу.
Поднял тестовый сервер на базе FreeBSD (установлено три физические сетевые карточки. Одна смотрит в "мир" (статический IP выданный провайдером 192.168.4.42), две другие образуют две локальные подсети), пересобрал ядро со всеми необходимыми опциями, настроил две локальные подсети с раздачей адресов с помощью DHCP сервера, настроил bind9, самая базовая тестовая настройка IPFW, настроен NAT.
Что имею сейчас:
1. Сам маршрутизатор-сервер подключен к сети 192.168.0.0/16 и нормально выходит в глобальный интернет, скачивает/закачивает.
2. Раздает на две независимые локальные подсети (одна подсеть 10.1.0.0/16, другая подсеть 10.2.0.0/16) через DHCP сетевые адреса. При этом компьютеры в автоматическом режиме получают все нужные сетевые настройки, а сам сервер автоматически перенаправляет DNS в нужную сторону (шлюз провайдера 192.168.1.210)
3. Компьютеры нормально пингуются и общаются друг с другом внутри всей этой системы, как между локальными подсетями, так и с самим сервером и обратно.
4. НО, вот проблема, сам сервер в интернет выходит без проблем, а с локальных подсетей не выпускает. Не могу разобраться в чем причина.
Фаервол настроен пока в тестовом режиме на сквозное пропускание трафика, никаких ошибок или блокировок в логах нет.
Видится мне проблема либо в каких то не верных настройках IPFW kernel-NAT, либо ошибка в маршрутах..
Из локальных подсетей компьютеры не выпускает в интернет даже если вручную в них прописать предпочтительный DNS нашей сети 192.168.1.210
Ядро пересобрано с опциями:
===========================
Код: Выделить всё
options IPFIREWALL
options IPDIVERT
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=5
options IPFIREWALL_NAT
options LIBALIAS
options ROUTETABLES=2
options DUMMYNET
options HZ=?1000?
по команде ifconfig
====================
Код: Выделить всё
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=8209a<TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC,LINKSTATE>
ether 00:e0:4c:ff:f9:67
inet 192.168.4.42 netmask 0xffff0000 broadcast 192.168.255.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 00:e0:4c:ff:f9:68
inet 10.1.0.1 netmask 0xffff0000 broadcast 10.1.255.255
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
vr0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=82808<VLAN_MTU,WOL_UCAST,WOL_MAGIC,LINKSTATE>
ether 00:1c:f0:cb:0d:bd
inet 10.2.0.1 netmask 0xffff0000 broadcast 10.2.255.255
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
media: Ethernet autoselect (none)
status: no carrier
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
inet 127.0.0.1 netmask 0xff000000
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
===========
Код: Выделить всё
hostname="server"
keymap="ru.koi8-r.kbd"
update_motd="NO"
clear_tmp_enable="YES"
ifconfig_re0="ether 00:e0:4c:ff:f9:67" # Карточка в мир. Нужно сменить MAC.. У нас привязка по MAC+IP в сети
ifconfig_re0_alias0="inet 192.168.4.42 netmask 255.255.0.0 -rxcsum" # IP выданный провайдером для выхода в интернет и маска сети
defaultrouter="192.168.1.210" # Шлюз провайдера для выхода в интернет
ifconfig_rl0="ether 00:e0:4c:ff:f9:68" # Карточка в подсеть LAN1 10.1.0.0/16 Тоже нужно сменить мак..
ifconfig_rl0_alias0="inet 10.1.0.1 netmask 255.255.0.0" # Собственно IP и маска для этой подсети
ifconfig_vr0="inet 10.2.0.1 netmask 255.255.0.0" # Третья карточка. В подсеть LAN2 10.2.0.0/16
gateway_enable="YES" #
sshd_enable="YES" #
moused_enable="NO" #
ntpd_enable="YES" #
ntpd_sync_on_start="YES" #
powerd_enable="YES" #
firewall_enable="YES" # ну, тут всё понятно
firewall_nat_enable="YES" #
firewall_nat_interface="re0" #
firewall_script="/etc/ipfw.conf" #
firewall_logging="YES" #
#firewall_type="SIMPLE" # Пока запускаю так. Со включенным этим тайпом в мир из локалок тоже не пускает..
dummynet_enable="NO"
dhcpd_enable="YES"
dhcpd_flags="-q"
dhcpd_ifaces="rl0 vr0"
named_enable="YES"
named_auto_forward="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="NO"
/etc/resolv.conf
==============
Код: Выделить всё
domain MyLAN
nameserver 127.0.0.1
nameserver 192.168.1.210
==============
Код: Выделить всё
net.inet.ip.fw.one_pass=0
net.inet.ip.fw.verbose=1
net.inet.ip.fw.verbose_limit=5
# Uncomment this to prevent users from seeing information about processes that
# are being run under another UID.
#security.bsd.see_other_uids=0
==============================
Код: Выделить всё
options {
directory "/usr/local/etc/namedb/working";
pid-file "/var/run/named/pid";
dump-file "/var/dump/named_dump.db";
statistics-file "/var/stats/named.stats";
listen-on { 10.1.0.1; 10.2.0.1; };
disable-empty-zone "255.255.255.255.IN-ADDR.ARPA";
disable-empty-zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA";
disable-empty-zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA";
include "/usr/local/etc/namedb/auto_forward.conf";
};
================================================
Код: Выделить всё
forwarders {
192.168.1.210;
};
forward first;
===================================
Код: Выделить всё
option domain-name "MyLAN";
option domain-name-servers 192.168.1.210, 10.1.0.1, 10.2.0.1;
option subnet-mask 255.255.0.0;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
authoritative;
log-facility local7;
subnet 10.1.0.0 netmask 255.255.0.0 {
range 10.1.1.1 10.1.1.254;
option routers 10.1.0.1;
option domain-name-servers 10.1.0.1;
allow unknown-clients;
}
subnet 10.2.0.0 netmask 255.255.0.0 {
range 10.2.1.1 10.2.1.254;
option routers 10.2.0.1;
option domain-name-servers 10.2.0.1;
allow unknown-clients;
}
Основные нужные мне переменные задал сразу, но пока большинство их не использую.
Права на файл выданы правильно, включая на выполнение.
При запуске фаервола никаких ошибок нет, все внесенные правила отображаются по команде ipfw show
============================
Код: Выделить всё
wan="re0"
wan_ip="192.168.4.42"
lan1="rl0"
lan2="vr0"
lan_ip1="10.1.0.1"
lan_ip2="10.2.0.1"
cmd="ipfw -q"
subnet0="192.168.0.0/16"
subnet1="10.1.0.0/16"
subnet2="10.2.0.0/16"
dns="192.168.1.210"
ks="keep-state"
good_tcp="22,25,37,43,53,80,443,110,119"
$cmd -f flush
$cmd -f table 0 flush
$cmd -f pipe flush
$cmd -f queue flush
$cmd table 0 add $subnet1
$cmd table 0 add $subnet2
$cmd add allow ip from any to any via lo0
$cmd add deny ip from any to 127.0.0.0/8
$cmd add deny ip from 127.0.0.0/8 to any
$cmd add deny all from any to any frag in via $wan
$cmd add allow all from any to any via $lan1
$cmd add allow all from any to any via $lan2
$cmd add allow all from $subnet1 to $subnet2
$cmd add allow all from $subnet2 to $subnet1
$cmd add allow all from any to any
$cmd add deny all from 192.168.0.0/16 to any in via $wan
$cmd add deny all from 172.16.0.0/12 to any in via $wan
$cmd add deny all from 10.0.0.0/8 to any in via $wan
$cmd add deny all from 127.0.0.0/8 to any in via $wan
$cmd add deny all from 0.0.0.0/8 to any in via $wan
$cmd add deny all from 169.254.0.0/16 to any in via $wan
$cmd add deny all from 192.0.2.0/24 to any in via $wan
$cmd add deny all from 204.152.64.0/23 to any in via $wan
$cmd add deny all from 224.0.0.0/3 to any in via $wan
$cmd nat 1 config log if $wan reset same_ports
$cmd add nat 1 all from any to any via $wan
$cmd add deny log all from any to any
==============================
Код: Выделить всё
Active Internet connections
Proto Recv-Q Send-Q Local Address Foreign Address (state)
udp4 0 0 localhost.ntp *.*
udp6 0 0 fe80::1%lo0.ntp *.*
udp6 0 0 localhost.ntp *.*
udp4 0 0 10.2.0.1.ntp *.*
udp4 0 0 10.1.0.1.ntp *.*
udp4 0 0 192.168.4.42.ntp *.*
udp4 0 0 10.2.0.1.domain *.*
udp4 0 0 10.1.0.1.domain *.*
Active UNIX domain sockets
Address Type Recv-Q Send-Q Inode Conn Refs Nextref Addr
c825e8bc stream 0 0 c82379fc 0 0 0 /var/run/devd.pipe
c825e560 dgram 0 0 0 c844b408 0 c825e60c
c825e60c dgram 0 0 0 c844b408 0 c825e6b8
c844b0ac dgram 0 0 0 c844b35c 0 0
c825e6b8 dgram 0 0 0 c844b408 0 c825e764
c825e764 dgram 0 0 0 c844b408 0 c844b158
c844b158 dgram 0 0 0 c844b408 0 c844b204
c844b204 dgram 0 0 0 c844b408 0 c844b2b0
c844b2b0 dgram 0 0 0 c844b408 0 0
c844b408 dgram 0 0 c84788e0 0 c825e560 0 /var/run/logpriv
c844b35c dgram 0 0 c84789fc 0 c844b0ac 0 /var/run/log
c825e810 seqpac 0 0 c82378e0 0 0 0 /var/run/devd.seqpacket.pipe
Проблема в том, что локалки пингуются друг с другом в обе стороны и с самим сервером и обратно.
Сам сервер в интернет выходит, скачивает/закачивает.
Сервер DHCP нормально раздает адреса, компьютеры нормально получают в автоматическом режиме настройки.
НО, вот с подсетей выйти в интернет нельзя.
Пожалуйста, ткните носом, где проблема.
Сам думаю, скорее всего либо в маршрутах, либо не верно работает NAT
Уже перерыл 100500 статей и столько же вариантов.
Результат один и тот же. Сервер в инет выходит, а локалки нет.