Решил "пощупать" реализацию NAT с помощью PF. Ознакомившись с документацией, убедился, что все не так и сложно.
Итак, исходные данные:
Исходя из указанного построения сети, понятно, что НАТить необходимо на двух внешних интерфейсах одновременно (на vlan684 и vlan685 соответственно).
Итак, для начала отредактируем конфигурационный файл pf.conf под свои нужды. В моем случае конфигурация получилась следующая:
# cat /etc/pf.conf # Задаем количество записей в таблице состояний |
Добавляем в стартовый скрипт rc.conf запуск PF:
# echo '# Packet Filter Firewall' >> /etc/rc.conf |
Запускаем Packet Filter:
# sh /etc/rc.d/pf start Enabling pf. |
На всякий случай "принудительно" перечитываем конфигурационный файл:
# pfctl -f /etc/pf.conf No ALTQ support in kernel |
Проверяем tcpdump-ом, работает ли NAT:
# tcpdump -i vlan106 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on vlan106, link-type EN10MB (Ethernet), capture size 68 bytes 14:56:19.105705 IP 10.200.106.3.1914 > ip254-116.starnet.lv.7777: . ack 2441059928 win 65285 14:56:19.279622 IP ip254-116.starnet.lv.7777 > 10.200.106.3.1914: P 1:12(11) ack 0 win 65022 14:56:19.406627 IP 10.200.106.3.1914 > ip254-116.starnet.lv.7777: . ack 12 win 65274 14:56:19.535325 IP 10.200.106.19.2282 > 194-182-17-190.fibertel.com.ar.6881: S 3138508329:3138508329(0) win 65535 <mss 1460,nop,nop,sackOK> 14:56:19.901696 IP ip254-116.starnet.lv.7777 > 10.200.106.3.1914: P 12:23(11) ack 0 win 65022 14:56:20.008502 IP 10.200.106.3.1914 > ip254-116.starnet.lv.7777: . ack 23 win 65263 14:56:20.130111 IP 10.200.106.19.6881 > 110-196-16-190.fibertel.com.ar.6881: UDP, length 65 14:56:20.181766 IP ip254-116.starnet.lv.7777 > 10.200.106.3.1914: P 23:34(11) ack 0 win 65022 |
Трафик на внутреннем интерфейсе идет в обе стороны. Соответственно все в норме. Для проверки состояния воспользуемся следующей командой:
# pfctl -si No ALTQ support in kernel ALTQ related functions disabled Status: Enabled for 0 days 00:35:52 Debug: Urgent State Table Total Rate current entries 2085 searches 88476828 41113.8/s inserts 108799 50.6/s removals 106714 49.6/s Counters match 81636835 37935.3/s bad-offset 0 0.0/s fragment 16 0.0/s short 4 0.0/s normalize 0 0.0/s memory 0 0.0/s bad-timestamp 0 0.0/s congestion 0 0.0/s ip-option 8 0.0/s proto-cksum 219 0.1/s state-mismatch 152 0.1/s state-insert 0 0.0/s state-limit 0 0.0/s src-limit 0 0.0/s synproxy 0 0.0/s |
Как оказалось, ничего сложного...
А посмотреть таблицу NAT'a
А посмотреть таблицу NAT'a можно как-то?
Воспользуйтесь командой: #
Воспользуйтесь командой:
pfctl -snat
pfctl -snat
pfctl -s nat выводит список
pfctl -s nat выводит список правил НАТ-а, а чтобы просмотреть таблицу преобразований необходимо вводить именно pfctl -s state.
Пример вывода pfctl -s nat:
Пример вывода pfctl -s state:
pfctl -sn #nat pfctl -sr
pfctl -sn #nat
pfctl -sr #rules
рекомендую The Book of PF 2nd Edition
ЗЫ: а вообще man pfctl оч помогает ))