URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 69795
[ Назад ]

Исходное сообщение
"NATD и виртуальные интерфейсы"

Отправлено lordvamp , 25-Окт-06 11:24 
ОС: Freebsd 6.1

Интерфейс fxp0 смотрит в сторону провайдера, на нем прописан 1 алиас:
ifconfig_fxp0="inet 80.22.22.22 netmask 255.255.255.0"
ifconfig_fxp0_alias0="inet 80.22.22.23 netmask 255.255.255.0"

Интерфейс xl0 смотрит в сторону локалки:
ifconfig_xl0="inet 10.0.0.1 netmask 255.255.255.0"

Возможно ли через divert natd маскарадить диапазон внутренних IP 10.0.0.2-100 на внешний IP 80.22.22.22, а диапазон 10.0.0.101-254 на 80.22.22.23? Как правильно прописать divert-ы?


Содержание

Сообщения в этом обсуждении
"NATD и виртуальные интерфейсы"
Отправлено kam , 25-Окт-06 12:39 
>ОС: Freebsd 6.1
>
>Интерфейс fxp0 смотрит в сторону провайдера, на нем прописан 1 алиас:
>ifconfig_fxp0="inet 80.22.22.22 netmask 255.255.255.0"
>ifconfig_fxp0_alias0="inet 80.22.22.23 netmask 255.255.255.0"
>
>Интерфейс xl0 смотрит в сторону локалки:
>ifconfig_xl0="inet 10.0.0.1 netmask 255.255.255.0"
>
>Возможно ли через divert natd маскарадить диапазон внутренних IP 10.0.0.2-100 на внешний
>IP 80.22.22.22, а диапазон 10.0.0.101-254 на 80.22.22.23? Как правильно прописать divert-ы?
>
Да, можно.
Запускаешь два natd, по одному на каждый диапазон внутренних адресов. И для каждого natd указываешь свой alias_address. Естественно, что каждый natd должен слушать свой сокет. Могу выслать работающие конфиги. Пиши на kam (собака) automax72 (точка) ru

"NATD и виртуальные интерфейсы"
Отправлено kam , 25-Окт-06 17:42 
Прошу прощения, почтой выслать нет возможности поэтому публикую здесь.
В /etc/rc.conf добавлено:
firewall_enable="YES"
firewall_script="/etc/ipfw.rules"
natd_enable="NO"

natd запускаются из /etc/rc.local:

/sbin/natd -f /etc/natd1.conf
/sbin/natd -f /etc/natd2.conf

В /etc/natd1.conf пишем:

use_sockets yes
same_ports yes
log_ipfw_denied yes
log_denied yes
log_facility daemon
alias_address 80.22.22.22
port 32001

В /etc/natd2.conf пишем:

use_sockets yes
same_ports yes
log_ipfw_denied yes
log_denied yes
log_facility daemon
alias_address 80.22.22.23
port 32002

В /etc/ipfw.rules пишем:

#!/bin/sh
          
fwcmd="/sbin/ipfw"
              
oif="rl0" # Внешний интерфейс.
iif="rl1" # Внутренний интерфейс.
        
wan1="80.22.22.22" # Внешний адрес N1.
wan2="80.22.22.23" # Внешний адрес N2.

base="10.0.0.0/24"

hosts1="{2-100}"
hosts2="{101-254}"
  
# Сбрасываем правила фаирвола.
$fwcmd -f flush

# Запрещаем спуфинг на внешнем интерфейсе.
$fwcmd add deny log all from any to any in via $oif not verrevpath

# Разрешаем траффик на внутреннем интерфейсе.
$fwcmd add allow all from any to any via ${iif}

#Заворачиваем пакеты, входящие с внешнего интерфейса, в диверт.
$fwcmd add divert 32001 all from any to ${wan1} in via ${oif}
$fwcmd add divert 32002 all from any to ${wan2} in via ${oif}

# Проверяем состояние динамических правил.
$fwcmd add check-state

# Разрешаем локальный траффик.
$fwcmd add allow all from any to any via lo0
$fwcmd add deny all from any to 127.0.0.0/8
$fwcmd add deny all from 127.0.0.0/8 to any

# Запоминаем состояние сессий относящихся к NAT.
$fwcmd add skipto 60000 all from ${base}${hosts1} to any out via ${oif} keep-state
$fwcmd add skipto 60000 all from ${base}${hosts2} to any out via ${oif} keep-state

# Разрешаем себе выход наружу.
$fwcmd add allow all from me to any via ${oif} keep-state

# Запрещаем всё по-умолчанию.
$fwcmd add deny log all from any to any

#Заворачиваем исходящие пакеты в диверт.
$fwcmd add 60000 divert 32001 all from ${base}${hosts1} to any out via ${oif}
$fwcmd add divert 32002 all from ${base}${hosts2} to any out via ${oif}

$fwcmd add allow all from any to any


PS: Всё это работает на FreeBSD 5.5-STABLE, но думаю что и на 6.1 проблем не будет.


"NATD и виртуальные интерфейсы"
Отправлено lordvamp , 27-Окт-06 14:48 
Спасибо! Заработало