Обсуждение статьи Шлюз (NAT) + DHCP-сервер на OpenBSD
Все вопросы касающиеся проблем и дополнений к статье пишите в этой теме.
А также настроить встроенный пакетный фильтр (pf) на работу в качестве NAT (Network Address Translation). Делается это в файле конфигурации /etc/pf.conf с помощью параметра nat-to, например так:
- Код: Выделить всё
pass out on $ext_if from 172.18.7.0/16 nat-to 10.135.62.26
В данном случае мы перенаправляем весь трафик из внутренней (локальной) сети 172.18.7.0 на адрес провайдера (или модема) 10.135.62.26.
Обратите внимание на переменную $ext_if. Вместо неё должно быть подставлено название внешнего интерфейса (который подключён к сети провайдера). Обычно она определяется в самом начале pf.conf примерно следующим образом:
- Код: Выделить всё
ext_if="fxp0" # если fxp0 имеет адрес 10.135.62.26, как в нашем примере
int_if="fxp1" # если fxp1 - 172.18.7.0/16
pass out on $ext_if from $int_if nat-to 10.135.62.26
ext_ip="10.135.62.26/32"
# макросы
ext_ip="10.135.62.26/32"
ext_if="fxp0" # 10.135.62.26/32
int_if="fxp1" # 172.18.7.0/16
# правила или чё там дальше ))
pass out on $ext_if from $int_if nat-to $ext_ip
Сергей писал(а):Спасибо за дополнение! Можно конечно и так сделать, но обычно у сервера статический IP-адрес в сети. А вот провайдер действительно может давать динамический, или же он может меняться как-то ещё. Поэтому в статье дана переменная ext_if на такой случай.
А что касается IP-адресов вместо имён, так это делается для уменьшения пересылок и преобразований. Ведь машины между собой общаются только по идентификаторам (MAC и IP), а имена они не понимают.
uname -rm
8.2-RELEASE-p1 i386
sudo cat /etc/pf.conf
####МАКРОСЫ####
ext_if="fxp0" #Внешний интерфейс
int_if="fxp1" #Внутренний интерфейс
icmp_types="{ echoreq, unreach }"
nat_tcp_udp="{ http, https, rdp, smtps, smtp, 587, pop3, pop3s, imap, imaps, ntp, nntp, domain, ssh, smtps, smtp, 210, 5222 }"
proxy_tcp_udp="{ ftp, ftp-data, domain, http, https, 591, 587, 210, 280, 488, 777, 8000, 8080, 8087, 8090, 8888 }"
user_proxy_port="{ domain, http, 8000, 8080, 8087, 8090, 8888 }"
user_nat_port="{ cvsup, ftp, ftp-data, https, rdp, smtps, 587, pop3, pop3s, imap, imaps, ntp, nntp, domain, ssh, z39.50, xmpp-client, 933 }"
nfs_serv="{ 192.168.1.253/32 }"
table <root> persist file "/etc/pfacl/pf.root"
table <admin> persist file "/etc/pfacl/pf.admin"
table <administrativ> persist file "/etc/pfacl/pf.administrativ"
table <student> persist file "/etc/pfacl/pf.student"
table <dnsslave> persist file "/etc/pfacl/pf.dnsslave"
table <white> persist file "/etc/pfacl/pf.white"
table <badip> persist file "/etc/pfacl/pf.badip"
table <mailru> persist file "/etc/pfacl/pf.mailru"
table <goodip> persist
table <sshguard> persist
table <sshblock> persist
set limit states 200000
set limit table-entries 200000
set loginterface $ext_if
set skip on lo0 #пропускаем проверку на петле
set block-policy drop
set timeout { frag 10, tcp.established 3600 }
scrub in all fragment reassemble #собираем все части пакета перед отправкой
#Очереди, полоса - 20мбит, режем исходящий трафик от сервера с стороны внешнего интерфейса tun0.
#altq on $ext_if cbq bandwidth 19800Kb queue { qssh, qhttp, qdns, qack, qftp }
.
.
.
######## DNS
pass in proto udp from any to any port 53
pass in proto tcp from <dnsslave> to any port 53
#pass out log proto tcp from any to <dnsslave> port 53 no state queue qdns
######## NTP
pass in on $int_if proto { tcp, udp } from any to $int_if port { 123 } #разрешаем самбу
######## SAMBA
pass in on $int_if proto { tcp, udp } from any to $int_if port { 137:139 } #разрешаем самбу
pass in on $int_if proto { tcp, udp } from any to $int_if port { 445 } #разрешаем самбу
######## FTP
pass in proto tcp from any to $ext_if port ftp keep state #разрешаем pure-ftpd
pass in proto tcp from any to $ext_if port ftp-data keep state #разрешаем pure-ftpd
pass in proto tcp from any to $ext_if port { 49151:49999 } keep state #разрешаем pure-ftpd
######## NFS
pass in on $int_if proto { tcp udp } from $nfs_serv to $int_if port { 111 } keep state
pass in on $int_if proto tcp from $nfs_serv to $int_if port { 703 } keep state
pass in on $int_if proto tcp from $nfs_serv to $int_if port { 892 } keep state
pass in on $int_if proto tcp from $nfs_serv to $int_if port { 998 } keep state
pass in on $int_if proto tcp from $nfs_serv to $int_if port { 2049 } keep state
######## JABBER
pass in proto tcp from any to $ext_if port 5222 keep state #разрешаем XMPP
pass in proto tcp from any to $ext_if port 5223 keep state #разрешаем XMPP
pass in proto tcp from any to $ext_if port 5269 keep state #разрешаем XMPP
pass in proto tcp from any to $ext_if port 5280 keep state #разрешаем XMPP
######## ALL
.
.
.
.
Raven2000 писал(а):Надо дописывать статью однозначно.
Сергей писал(а):Raven2000 писал(а):Надо дописывать статью однозначно.
Если дописать эту статью, то изначальная идея простоты, краткости и доступности потеряет смысл. Этак статейка создана для начинающих энтузиастов, у которых есть желание попробовать сделать свой сервак на BSD.
Сергей писал(а):А вот написать новую статью с деталями по настройке пакетного фильтра, как предложил ttys, было бы совсем неплохо. Прошу Вас, господа, не стесняйтесь, внесите свой вклад в популяризацию BSD-систем в Рунете! У нас так не хватает хороших описаний для русскоязычного населения.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5