Нет выхода в интернет с локалки IPFW+kernel_NAT+DHCPD

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Myr4ikTM
проходил мимо
Сообщения: 3
Зарегистрирован: 2015-06-07 13:52:22

Нет выхода в интернет с локалки IPFW+kernel_NAT+DHCPD

Непрочитанное сообщение Myr4ikTM » 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

Ядро пересобрано с опциями:
===========================

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

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>
/etc/rc.conf
===========

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

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
/etc/sysctl.conf
==============

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

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
/usr/local/etc/namedb/named.conf
==============================

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

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";

};
содержимое /usr/local/etc/namedb/auto_forward.conf
================================================

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

forwarders {
	192.168.1.210;
	};
forward first;
содержимое /usr/local/etc/dhcpd.conf
===================================

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

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;
}
Содержимое /etc/ipfw.conf пока чисто в тестовом режиме, чтобы проверить работу сервера в целом..
Основные нужные мне переменные задал сразу, но пока большинство их не использую.
Права на файл выданы правильно, включая на выполнение.
При запуске фаервола никаких ошибок нет, все внесенные правила отображаются по команде 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
Отображение по команде netstat
==============================

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

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 статей и столько же вариантов.
Результат один и тот же. Сервер в инет выходит, а локалки нет.
Последний раз редактировалось f_andrey 2015-06-07 14:44:23, всего редактировалось 1 раз.
Причина: Автору. пожалуйста, выбирайте соответствующий раздел форума, оформляйте сообщение по человечески.

Хостинговая компания 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/

guest
проходил мимо

Нет выхода в интернет с локалки IPFW+kernel_NAT+DHCPD

Непрочитанное сообщение guest » 2015-06-07 19:49:33

для начала, закомментарить:
#firewall_script="/etc/ipfw.conf"

и сделать открытый firewall:

firewall_type="OPEN"

смотрите:

ipfw nat show
netstat -rn

Dmitriy_3206
рядовой
Сообщения: 44
Зарегистрирован: 2014-10-13 15:51:34

Нет выхода в интернет с локалки IPFW+kernel_NAT+DHCPD

Непрочитанное сообщение Dmitriy_3206 » 2015-06-08 14:58:04

Myr4ikTM,
в IpFw Не разбираюсь, сам пользуюсь PF
Точно достаточно Ваших правил:

nat 1 config log if $wan reset same_ports
add nat 1 all from any to any via $wan

?
А попробуйте TCPDUMP посмотреть на выход. Может у вас пакеты уходят не прикрытые натом?

Myr4ikTM
проходил мимо
Сообщения: 3
Зарегистрирован: 2015-06-07 13:52:22

Нет выхода в интернет с локалки IPFW+kernel_NAT+DHCPD

Непрочитанное сообщение Myr4ikTM » 2015-06-08 18:45:13

guest писал(а):для начала, закомментарить:
#firewall_script="/etc/ipfw.conf"

и сделать открытый firewall:

firewall_type="OPEN"

смотрите:

ipfw nat show
netstat -rn
Ваш вариант сразу сработал. Интернет с обоих локальных сетей пошел отлично.

Выкладываю полученные результаты по командам:

ipfw nat show

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

nat 123: icmp=0, udp=73, tcp=23, sctp=0, pptp=0, proto=0, frag_id=0 frag_ptr=0 / tot=96

netstat -rn

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

Routing tables

Internet:
Destination        Gateway            Flags      Netif Expire
default            192.168.1.210      UGS         re0
10.1.0.0/16        link#2             U           rl0
10.1.0.1           link#2             UHS         lo0
10.2.0.0/16        link#3             U           vr0
10.2.0.1           link#3             UHS         lo0
127.0.0.1          link#4             UH          lo0
192.168.0.0/16     link#1             U           re0
192.168.4.42       link#1             UHS         lo0

Internet6:
Destination                       Gateway                       Flags      Netif Expire
::/96                             ::1                           UGRS        lo0
::1                               link#4                        UH          lo0
::ffff:0.0.0.0/96                 ::1                           UGRS        lo0
fe80::/10                         ::1                           UGRS        lo0
fe80::%lo0/64                     link#4                        U           lo0
fe80::1%lo0                       link#4                        UHS         lo0
ff01::%lo0/32                     ::1                           U           lo0
ff02::/16                         ::1                           UGRS        lo0
ff02::%lo0/32                     ::1                           U           lo0

Судя по всему у меня в конфиге IPFW.conf ошибка именно NAT.

Нужна была вот такая строка:

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

$cmd add nat 123 ip4 from any to any via re0
Отправлено спустя 1 минуту 43 секунды:
guest писал(а):для начала, закомментарить:
#firewall_script="/etc/ipfw.conf"

и сделать открытый firewall:

firewall_type="OPEN"

смотрите:

ipfw nat show
netstat -rn
Вот что имеем с вашими рекомендациями по команде ipfw show:

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

00050 5364 1769420 nat 123 ip4 from any to any via re0
00100   72    4272 allow ip from any to any via lo0
00200    0       0 deny ip from any to 127.0.0.0/8
00300    0       0 deny ip from 127.0.0.0/8 to any
00400    0       0 deny ip from any to ::1
00500    0       0 deny ip from ::1 to any
00600    0       0 allow ipv6-icmp from :: to ff02::/16
00700    0       0 allow ipv6-icmp from fe80::/10 to fe80::/10
00800    0       0 allow ipv6-icmp from fe80::/10 to ff02::/16
00900    0       0 allow ipv6-icmp from any to any ip6 icmp6types 1
01000    0       0 allow ipv6-icmp from any to any ip6 icmp6types 2,135,136
65000 9328 3397075 allow ip from any to any
65535    3     234 deny ip from any to any

guest
проходил мимо

Нет выхода в интернет с локалки IPFW+kernel_NAT+DHCPD

Непрочитанное сообщение guest » 2015-06-08 22:24:42

теперь можете аккуратно накручивать свой собственный скрипт для ipfw

ps. в ядре есть лишние опции, но они в принципе не мешают.

Myr4ikTM
проходил мимо
Сообщения: 3
Зарегистрирован: 2015-06-07 13:52:22

Нет выхода в интернет с локалки IPFW+kernel_NAT+DHCPD

Непрочитанное сообщение Myr4ikTM » 2015-06-09 21:45:42

Спасибо за оперативную и точную помощь :)

Да, теперь буду крутить сами правила фаервола.

Но вот пока не могу понять, почему именно строка:

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

add nat 123 ip4 from any to any via re0
А не вот такая, как пишут в мануалах:

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

add nat 1 ip from any to any via re0
???

Объясните мне доступно, пожалуйста.