Дано: шлюз на freebsd, все пользователи выходят в инет через nat. Используется kernel nat и ipfw. Имеется пул адресов от провайдера.
1.2.3.4 - 8 Client IP
Маска 255.255.255.248
Шлюз 1.2.3.3
+ внешний один адрес a.b.c.d, натящиеся абоны ходят во внеху через него.re0 - внеха
re1 - локалкаЗадача: Выделить определённой клиентской машине (для примера 172.16.0.20) реальный ип адрес.
Что было сделано:
Установлен natd. rc.conf выглядит так
gaetway_enable="YES"
hostname="billing"
ifconfig_re0="a.b.c.d" netmask 255.255.255.252" # внешний интерфейс (Internet)
ifconfig_re1="172.16.0.1 netmask 255.255.255.0" # внутренний интерфейс
ifconfig_re1_alias0="1.2.3.3 netmask 255.255.255.248" #выделен алиас из пула адресов, выданых провайдером.
defaultrouter="a.b.c.q" # внешний шлюз по умолчанию
firewall_enable="YES"
firewall_type="/etc/firewall-nat"
dummunet_enable="YES"
natd_enable="YES"
#natd_flags="-f /etc/natd.conf"
natd_interface="re0"Рестартимся, что бы применить все изменения, смотрим ifconfig
re1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=209b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC>
ether XXXXXXX
inet 172.16.0.1 netmask 0xffffff00 broadcast 172.16.0.255
inet 1.2.3.3 netmask 0xfffffff8 broadcast 1.2.3.9re0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=209b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC>
ether XXXXXXXXXX
inet a.b.c.d netmask 0xfffffffc broadcast a.b.c.e
Добавлены правила:
divert 8668 ip from 172.16.0.20 to any out via re0
divert 8668 ip from any to any in via re0Правила для данного адреса в целом выглядят так:
01100 292647 39374983 allow ip from 172.16.0.0/24 to any via re1
05007 0 0 divert 8668 ip from 172.16.0.20 to any out via re0
05008 0 0 divert 8668 ip from any to any in via re0
05011 0 0 allow ip from any to 172.16.0.20 via re1
Выставляю на клиентской машине адрес 172.16.0.20 выхожу в инет и вижу, что ИП a.b.c.d а не
1.2.3.X Что я делаю не так?
Пробовал ещё добавить redirect_address 172.16.0.20 1.2.3.X в конфиг natd.
без natdipfw nat 1 config ip a.b.c.d redirect_addr 172.16.0.20 a.b.c.x
правила в неправильном порядке указаны, до ната не доходит.
> без natd
> ipfw nat 1 config ip a.b.c.d redirect_addr 172.16.0.20 a.b.c.x
> правила в неправильном порядке указаны, до ната не доходит.Вы имели ввиду ipfw nat 1 config ip 1.2.3.4 redirect_addr 172.16.0.20 1.2.3.x ?
1.2.3.4 это ип из пула адресов выданных провайдером, которые я должен редиректить до абонента
a.b.c.d это натящийся ип для серых адресовПри попытке сделать так
ipfw nat 1 config ip a.b.c.d redirect_addr 172.16.0.20 a.b.c.x упал инет)
> Дано: шлюз на freebsd, все пользователи выходят в инет через nat. Используется
> kernel nat и ipfw. Имеется пул адресов от провайдера.Уважаемый, кто вам поручил конфигурировать файервол. Вы не можете оличит kernel nat от userland nat (aka natd)
>[оверквотинг удален]
> Что было сделано:
> Установлен natd. rc.conf выглядит так
> gaetway_enable="YES"
> hostname="billing"
> ifconfig_re0="a.b.c.d" netmask 255.255.255.252" # внешний интерфейс (Internet)
> ifconfig_re1="172.16.0.1 netmask 255.255.255.0" # внутренний интерфейс
> ifconfig_re1_alias0="1.2.3.3 netmask 255.255.255.248" #выделен алиас из пула адресов,
> выданых провайдером.
> defaultrouter="a.b.c.q" # внешний шлюз по умолчанию
> firewall_enable="YES"firawall_nat="YES" <- вот теперь будет ядерный
>[оверквотинг удален]
> ether XXXXXXX
> inet 172.16.0.1 netmask 0xffffff00
> broadcast 172.16.0.255
> inet 1.2.3.3 netmask 0xfffffff8
> broadcast 1.2.3.9
> re0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
> options=209b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC>
> ether XXXXXXXXXX
> inet a.b.c.d netmask 0xfffffffc
> broadcast a.b.c.eДалее каша... Читаем man ipfw
А в целом вам уже ответили. Копаем в сторону redirect_addr. Учтите нюансы, связанные с deny_in. Если ядерный нат сконфигурирован с этой опцией, то редирект адресов работать не будет.
Еще, допустим на внешнем у вас основной адрес и дополнительный (как алиас), который вам нужно пробросить во внутрь сети. Тогда в конфиге ната
ipfw nat 1 config if re0 redirect_addr ...
не указывайте if re0, так как парсер будет ругаться на несуществующий адрес.
Лично у меня сделано так: по одному инстансу ната на каждой внешней сетевой, который так же редиректит порты + один инстанс ната, который только редиректит адреса внуть сети и настроени как я упомянул выше.
>[оверквотинг удален]
> 05008 0
> 0 divert 8668 ip from any to any
> in via re0
> 05011 0
> 0 allow ip from any to 172.16.0.20 via
> re1
> Выставляю на клиентской машине адрес 172.16.0.20 выхожу в инет и вижу, что
> ИП a.b.c.d а не
> 1.2.3.X Что я делаю не так?
> Пробовал ещё добавить redirect_address 172.16.0.20 1.2.3.X в конфиг natd.