Простой вариант NAT+PF

Аватар пользователя ttys

Для организации NAT с помощью PF нам понадобится следующее:

Включить pf (packet filter)

vi /etc/rc.conf

gateway_enable="YES"		#Разрешает серверу быть шлюзом 
pf_enable="YES"			#Запуск pf 
pflog_enable="YES"		#не обязательно, возможность писать логи pf
pf_rules="/etc/pf.conf"		#Пуьт к правилам pf
pf_program="/sbin/pfctl"	#Путь к программе управления pf
pf_flags=""			#Необходимо для pfctl
defaultrouter="192.168.1.254"   #Шлюз провайдера

Можно и пересобрать ядро, с поддержкой pf
дабы pf не ругался на отсутствие ALTQ (ограничивать пропускную способность канала) или для его использования
No ALTQ support in kernel 
ALTQ related functions disabled 

добовляем в ядро и ALTQ
cp /usr/src/sys/i386/conf/GENERIC /usr/src/sys/i386/conf/ROUTER-PF
vi /usr/src/sys/i386/conf/ROUTER-PF

# pf
device		pf
device		pflog
device		pfsync
options		ALTQ
options		ALTQ_CBQ	# Class Bases Queuing (CBQ)
options		ALTQ_RED	# Random Early Detection (RED)
options		ALTQ_RIO	# RED In/Out
options		ALTQ_HFSC	# Hierarchical Packet Scheduler (HFSC)
options		ALTQ_PRIQ	# Priority Queuing (PRIQ)
options		ALTQ_NOPCC	# Required for SMP build

после установки ядра надо подредактировать правила pf
vi /etc/pf.conf

ext_if="rl1"		 	#Внешний интерфейс (смотрит к провайдеру WAN)
int_if="rl0" 			#Внутренний интерфейс (смотрит в нашу сеть LAN)
 
set skip on lo0 #пропускаем проверку на петле
scrub in all #собираем все части пакета перед отправкой
nat on $ext_if from $int_if:network to any -> ($ext_if)
 
block all #запретим все отовсюду
pass in on $int_if from any to any #разрешаем всё из локальной сети 
pass out on $ext_if from $ext_if to any #разрешаем серверу доступ в интернет 
pass in on $ext_if proto tcp from any to $ext_if port ssh #разрешаем ssh
pass in inet proto icmp all icmp-type echoreq #разрешаем ping 

Готово!

Осталось прочитать правила pf

pfctl -f /etc/pf.conf

pfctl -e #включить pf
pfctl -d #выключить pf

можно натить по ip адресам.
Для этого надо немного поредоктировать pf.conf
vi /etc/pf.conf

ext_if="rl1"		 	#Внешний интерфейс (смотрит к провайдеру WAN)
int_if="rl0" 			#Внутренний интерфейс (смотрит в нашу сеть LAN)
 
table <pf-allow-pc> file "/etc/pf-allow-pc"
set skip on lo0 #пропускаем проверку на петле
scrub in all #собираем все части пакета перед отправкой
nat on $ext_if from <pf-allow-pc> to any -> ($ext_if)
 
block all #запретим все отовсюду
pass in on $int_if from any to any #разрешаем всё из локальной сети 
pass out on $ext_if from $ext_if to any #разрешаем серверу доступ в интернет 
pass in on $ext_if proto tcp from any to $ext_if port ssh #разрешаем ssh
pass in inet proto icmp all icmp-type echoreq #разрешаем ping 

и добавить ip адреса(в строке должен быть один адрес) тех кому разрешено ходить в интернет
vi /etc/pf-allow-pc

192.168.0.2
192.168.0.3
192.168.0.5

P.S. ВАЖНО!

В случае если на сервере не запущен named то на клиентских компьютерах надо в поле DNS указать пограничный DNS сервер, или настраивать named самим

Для того, чтобы настроить named самим, надо сделать следующее:

vi /etc/rc.conf

named_enable="YES"

Затем надо указать в named.conf наш шлюз, для этого:

Надо найти строки listen-on и forwarders и добавьте адрес внутреннего интерфейса
vi /etc/namedb/named.conf

listen-on { 127.0.0.1; 192.168.1.1;};
forwarders { 127.0.0.1; 192.168.1.1;};

Ссылки:

Ваша оценка: Нет Средняя: 5 (3 голоса)

нат + пф

я вот такой бы использовал лучше:

ext_if = "fxp0" # соединен с интернетом
int_if = "vr0" # внутрь локалной сети
tcp_services = "{ 22 }" #порт ssh по-умолчанию 
 
nat on $ext_if from $int_if:network to any -> ($ext_if) #включаем NAT 
 
block all #запретим все отовсюду 
 
pass in on $int_if from any to any #разрешаем всё из локальной сети 
 
pass out on $ext_if from $ext_if to any #разрешаем серверу доступ в интернет 
 
pass in on $ext_if proto tcp from any to $ext_if port $tcp_services #разрешаем подключение к 22 порту сервера 
 
pass in inet proto icmp all icmp-type echoreq #разрешаем ping 

ssh

подправил =)

tcp_services = "{ 22 }" #порт ssh по-умолчанию
pass in on $ext_if proto tcp from any to $ext_if port $tcp_services

можно так:

pass in on $ext_if proto tcp from any to $ext_if port ssh

ttys, я с тебя фигею... ты

ttys, я с тебя фигею...
ты куда NAT правило запхал посмотрел хоть?

)) исправил

))
исправил

а если есть еще впновский

а если есть еще впновский ng0 то как лучше сделать? и 2 ната

2 chel

не совсем ясен вопрос. надо 2 ната или это вопрос про 2 ната. лучше пиши на форуме, в деталях

)) kruto

Spasibo ))

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <p> <span> <div> <h1> <h2> <h3> <h4> <h5> <h6> <img> <map> <area> <hr> <br> <br /> <ul> <ol> <li> <dl> <dt> <dd> <table> <tr> <td> <em> <b> <u> <i> <strong> <font> <del> <ins> <sub> <sup> <quote> <blockquote> <pre> <address> <code> <cite> <embed> <object> <param> <strike> <caption>
  • Строки и параграфы переносятся автоматически.
  • Вы можете использовать подсветку исходного кода следующими тегами: <code>, <blockcode>, <apache>, <bash>, <c>, <cpp>, <mysql>, <perl>, <php>, <python>, <text>. The supported tag styles are: <foo>, [foo].
  • Glossary terms will be automatically marked with links to their descriptions. If there are certain phrases or sections of text that should be excluded from glossary marking and linking, use the special markup, [no-glossary] ... [/no-glossary]. Additionally, these HTML elements will not be scanned: a, abbr, acronym, code, pre.

Подробнее о форматировании

CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
17 + 0 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.

Последние статьи

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer