Шлюз на FreeBSD 8
Я пересобрал ядро с поддержкой ipfw, всё настроил, и всё вроде работает, кроме одного: DNS.
Вот что я пробовал (на кливентской системе в адресе шлюзе указан IP моего шлюза, он пингуется):
- если у клиента в DNS не указывать ничего, то с этой машины DNS не работает (nslookup в качестве сервера по умолчанию пишет 127.0.0.1);
- тоже самое получается, если указать адрес шлюза как DNS;
- если же явно указать адрес DNS прова, то всё замечательно работает.
Заметил, что, если я подключаюсь к сети напрямую (без шлюза), то в свойствах соединения адрес DNS автоматически ставится как адрес DNS прова.
Вопрос - как сделать так, чтобы шлюз автоматически отправлял этот адрес клиенту? Или по крайней мере пропускал запросы DNS через себя?
Я ради интереса попробовал поднять named на шлюзе с forwarders { адрес-DNS-прова; }; - у клиента указал адрес шлюз как DNS и это тоже заработало. Но не хочется же держать BIND только ради этого...
Конфиги:
00100 divert 8668 ip from any to any via rl0
00200 allow ip from any to any
65535 allow ip from any to any
# netstat -r
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 172.хх.16.1 UGS 1 254 rl0
localhost link#3 UH 0 0 lo0
172.xx.16.0/21 link#1 U 0 0 rl0
172.xx.17.210 link#1 UHS 0 0 lo0
192.168.4.0 link#2 U 1 559 ed0
192.168.4.1 link#2 UHS 0 0 lo0
# cat /etc/rc.conf
gateway_enable="YES"
hostname="ga.ter"
inetd_enable="YES"
sshd_enable="YES"
named_enable="YES"
ifconfig_rl0="dhcp"
ifconfig_ed0="inet 192.168.4.1 netmask 255.255.255.0"
defaultrouter="172.xx.0.4"
natd_enable="YES"
natd_interface="rl0"
natd_flags=""
firewall_enable="YES"
firewall_type="/usr/local/etc/firewall.conf"
rl0 - интерфейс во внешнюю сеть, ed0 - внутренняя сеть. Странно, что default gateway = 172.хх.16.1, хотя я указал ему 172.хх.0.4
Аа... я просто сколько прочитал статей по поводу поднятия шлюза, так там всё было просто: пересобрать ядро с ipfw и добавить его в rc.conf вместе с gateway
_enable и defaultrouter. Про то, что у клиентов тоже надо руками прописывать, не было сказано.
Так что я думал всё это будет прозрачно.
Я тоже думал в сторону DHCP, но для моей сетки это будет слишком круто.
Спасибо за разъяснение, ~ArchimeD~ :)
На всякий случай, /usr/ports/net/isc-dhcp31-server
UPD: Я тут подумал насчет еще одного бредового варианта - редиректить фаерволом порт (53 кажется) на днс-сервер прова, но что-то я настолько смутно себе представляю, как оно уживется с натом, что не буду дальше развивать мысль.
pf_enable="YES" в rc.conf
в /etc/pf.conf
nat on $ext_if from !($ext_if) to any -> ($ext_if)
DNS можно в дефолтной конфигурации использовать, либо прописать ему forwarders'ов прововских.
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/network-dns.html
Вопрос - как сделать так, чтобы шлюз автоматически отправлял этот адрес клиенту? Или по крайней мере пропускал запросы DNS через себя?
Я ради интереса попробовал поднять named на шлюзе с forwarders { адрес-DNS-прова; }; - у клиента указал адрес шлюз как DNS и это тоже заработало. Но не хочется же держать BIND только ради этого...
вообще-то - держать bind для таких целей - нормальная практика.
и да, что мешает выдавать DNS по DHCP?
pf_enable="YES" в rc.conf
в /etc/pf.conf
Хм, про pf нигде не читал. Спасибо, попробую, когда пров вернёт мне инет.
А, ясно. Я первый раз что-то такое делаю, так что пока не знаю, что нормально, а что нет :)
Читал где-то, что DHCP используется в больших сетях, вот и подумал, что тяжеловато будет для сети в несклько компов. Впрочем, попробую поставить, тем более все так его советуют :)
Спасибо за ответы.
Читал где-то, что DHCP используется в больших сетях, вот и подумал, что тяжеловато будет для сети в несклько компов. Впрочем, попробую поставить, тем более все так его советуют :)
DHCP используется в сетях от двух до бесконечности компов. разницы - нету.
upd:
Хм, интересно, при старте системы named занимает почти 50 метров оперативки, а если перезапустить его, то 15. Потом с течением времени снова набирает, прчём комп не подключен к инету и запросов, которые мог бы кэшировать, тоже не было. Почему он такой огромный?..
Всё-таки не понятно, чего он столько занимает. Пробовал погуглить, но нахошел только про опции datasize и max-cache-size. Я их пробовал в named.conf ставить, но изменений вообще никаких. При том, что на другом сервере с FreeBSD 6 named занимает едва ли 4 метра.
BIND v9.
named.conf:
192.168.4.0/8;
};
options {
directory "/etc/namedb";
pid-file "/var/run/named/pid";
dump-file "/var/dump/named_dump.db";
statistics-file "/var/stats/named.stats";
allow-query { mynet; };
allow-transfer { mynet; };
allow-recursion { mynet; };
forwarders { };
};
zone "." { type hint; file "named.root"; };
#top -o size:
38 processes: 2 running, 36 sleeping
CPU: 39.0% user, 0.0% nice, 60.6% system, 0.0% interrupt, 0.4% idle
Mem: 68M Active, 255M Inact, 83M Wired, 23M Cache, 60M Buf, 65M Free
Swap: 4096M Total, 4096M Free
PID USERNAME THR PRI NICE SIZE RES STATE TIME WCPU COMMAND
77342 root 1 98 0 44172K 41588K RUN 0:01 8.98% cc1plus
77325 bind 4 76 0 15388K 9620K kqread 0:00 0.00% named
12932 root 1 44 0 9400K 3148K select 0:01 0.00% sshd
840 root 1 44 0 6676K 2724K select 0:00 0.00% sshd
847 root 1 44 0 6072K 2436K select 0:00 0.00% sendmail
851 smmsp 1 44 0 6072K 2392K pause 0:00 0.00% sendmail
13389 root 1 44 0 5556K 2196K pause 0:00 0.00% csh
917 root 1 44 0 5556K 2124K pause 0:00 0.00% csh
3045 root 1 44 0 5556K 2056K ttyin 0:00 0.00% csh
76809 root 1 76 0 4212K 1524K wait 0:00 0.00% gmake
76161 root 1 76 0 4212K 1476K wait 0:00 0.00% gmake
76014 root 1 76 0 4212K 1472K wait 0:00 0.00% gmake
60557 root 1 76 0 4212K 1200K wait 0:00 0.00% gmake
909 root 1 46 0 3808K 1404K wait 0:00 0.00% login
910 root 1 44 0 3808K 1404K wait 0:00 0.00% login
77339 root 1 44 0 3680K 1556K RUN 0:00 0.00% top
76162 root 1 76 0 3624K 1184K wait 0:00 0.00% sh
Правда, я всё это смотрю через TOP, а там 2 колонки - SIZE & RES. RES всегда показывает, действительно, немного (30 мб при -medium, даже со включенными falcon и innodb), но почему такой огромный SIZE?
Я поискал в инете, и так понял (хотя толком никто точно сказать не мог), что RES - это то, что используется процессом, а SIZE - некий общий размер, который может использоваться в принципе.
Отсюда вопросы:
1. насколько нормален такой разброс между size & res? На втором сервере (VDS) с FreeBSD 6 и MySQL 5 такого разброса нет ни у одного процесса - мускул (39m & 35m), named (4m & 3m), все httpd (~16m & ~11m).
2. почему, в конце концов, настолько большой size?..
3. всё это вообще странно, поскольку в компе стоит всего 128 мб RAM, а по выводу top там можно насчитать, будто у меня все 512 (по size). В то же время:
Mem: 80M Active, 996K Inact, 26M Wired, 1868K Cache, 22M Buf, 6836K Free
4. немного не по теме, но всё же: почему top показывает, что swap total = swap free? Вообще не используется свап?
Вот ещё что интересно - хотя у меня в my.cnf есть skip-innodb, в логе MySQL всё равно каждый раз записывается:
InnoDB: Started; log sequence number 0 46419
немножко про днсы - меня мои местные задолбали - работали через одно место - инет работал через раз. погуглил и нашел гугловские днсы:
8.8.8.8
8.8.4.4
поставил - все стало работать на отлично. так что рекомендую.
Всмысле забить :eek: А как мне оценивать что сколько памяти ест тогда? Полагаться на RES?
Кстати, был бы признателен, если б ты намекнул насколько возможно, из-за чего такая разница size <-> res и отсутствие оной на VDS с фрёй 6. Я могу понять (хотя и со скрипом), что это может объясняться какими-то внутренними механизмами работы памяти, не доступными винд-программеру, но всё же...
8.8.8.8
8.8.4.4
Ого, они их не закрывают для всех, кому не лень? Интересно, возьму на заметку :)
зы:
В силе остаётся вопрос о том, почему мускул упорно говорит, что грузит innodb, хотя её поддержка отключена (хотя тут может не стоило 6 версию ставить, рановато ещё)...