Простой вариант 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 ))

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

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer