NAT с помощью ipnat

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 можно так же использовать это руководство.

NAT с помощью ipnat: 2 комментария

  1. dgadavin

    Вопрос
    Пробрасываю порт
    В 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
    пакеты не ходят
    Подскажите пожалуйста где проблема?

    1. skeletor Автор записи

      Возможно, нужно ещё добавить pass out. Или смотреть через tcpdump, где уходят а где — не приходят.

Добавить комментарий для skeletor Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *