1) rc.conf
Добавляем такие строчки в /etc/rc.conf
ipnat_enable="YES"
ipnat_rules="/etc/ipnat.rules"
2) ipnat.rules
Для транслирования адресов вносим такие строчки:
map fxp0 10.10.10.0/24 -> XX.XX.XX.XX/32 proxy port ftp ftp/tcp
map fxp0 10.10.10.0/24 -> XX.XX.XX.XX/32 portmap tcp/udp 40000:65000
map fxp0 from 10.10.10.0/24 ! to XX.XX.XX.XX/32 -> XX.XX.XX.XX/32
где
– fxp0 – внешний интерфейс
– XX.XX.XX.XX – внешний IP-адрес
– 10.10.10.0 – внутрення подсеть.
3) ipnat и динамический внешний адрес
Если у вас внешний адрес динамический (получаете от провайдера), то правила будут выглядеть вот так:
map fxp0 10.10.10.0/24 -> 0.0.0.0/32 proxy port ftp ftp/tcp
map fxp0 10.10.10.0/24 -> 0.0.0.0/32 portmap tcp/udp 40000:65000
map fxp0 10.10.10.0/24 -> 0.0.0.0/32
4) Перечитывание правил.
При обычном перечитывании, то есть через
# /etc/rc.d/ipnat reload
выполняется обрыв текущих сессий. Что бы не обрывать сессии, можно использовать такую конструкцию:
# ipnat -f /etc/ipnat.conf
При этом будут сыпаться ошибки, но их можно игнорировать.
Добавить правило налету:
#echo "map dmfe0 192.168.1.0/24 -> 20.20.20.1/32" | ipnat -f -
Удалить налету: (под Solaris почему-то не работает)
– выполняем команду
# ipnat -r -f -
Если вдруг не сработало, то можно применить перечитывание ТОЛЬКО правил из конфига БЕЗ удаления текущих сессий NAT:
# ipnat -C -f /etc/ipf/ipnat.conf
– вводим полностью правило, точно так, как оно выводится через ipnat -l:
rdr igb1 XX.XX.XX.XX/32 port 12380 -> 10.5.0.252 port 80 tcp
– нажимаем Crtl+D.
Примечание.
Не используйте FastForwarding (sysctl net.inet.ip.fastforwarding) вместе с ipnat – NAT не будет работать.
Для более подробного изучения ipfilter можно так же использовать это руководство.
2 коментарі “NAT с помощью ipnat”
Вопрос
Пробрасываю порт
В ipnat
rdr ale0 from xxx.xxx.xxx.xxx/32 to yyy.yyy.yyy.yyy/32 port = 2223 -> 192.168.1.2 port 2223
в ipf
block in on ale0 all
pass in quick proto tcp from xxx.xxx.xxx.xxx to yyy.yyy.yyy.yyy port = 2223
пакеты не ходят
Подскажите пожалуйста где проблема?
Возможно, нужно ещё добавить pass out. Или смотреть через tcpdump, где уходят а где – не приходят.