NAT - реализация с помощью PF

Версия для печатиОтправить другуPDF version

Решил "пощупать" реализацию NAT с помощью PF. Ознакомившись с документацией, убедился, что все не так и сложно.

Итак, исходные данные:

  • офисная сеть 10.200.106.0/24;
  • интерфейс vlan106 - "смотрит" в офисную сеть;
  • интерфейс vlan684 - "смотрит" в Internet, default;
  • интерфейс vlan685 - "смотрит" в UA-IX, получает от вышестоящего маршрутизатора список сетей UA-IX.

Исходя из указанного построения сети, понятно, что НАТить необходимо на двух внешних интерфейсах одновременно (на vlan684 и vlan685 соответственно).

Итак, для начала отредактируем конфигурационный файл pf.conf под свои нужды. В моем случае конфигурация получилась следующая:

# cat /etc/pf.conf

# Задаем количество записей в таблице состояний
set limit states 500000
# Указываем значение таймаутов
set optimization aggressive
# NAT на интерфейсе vlan684
nat pass on vlan684 from 10.200.106.0/24 to any -> vlan684
# NAT на интерфейсе vlan685
nat pass on vlan685 from 10.200.106.0/24 to any -> vlan685

Добавляем в стартовый скрипт rc.conf запуск PF:

# echo '# Packet Filter Firewall' >> /etc/rc.conf
# echo 'pf_enable="YES"' >> /etc/rc.conf

Запускаем Packet Filter:

# sh /etc/rc.d/pf start

Enabling pf.
No ALTQ support in kernel
ALTQ related functions disabled
No ALTQ support in kernel
ALTQ related functions disabled
No ALTQ support in kernel
ALTQ related functions disabled
pf enabled

 На всякий случай "принудительно" перечитываем конфигурационный файл:

# pfctl -f /etc/pf.conf

No ALTQ support in kernel
ALTQ related functions disabled

Проверяем 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

 

Как оказалось, ничего сложного...

Ваша оценка: Нет Средняя: 4.9 (7 голосов)

А посмотреть таблицу NAT'a

А посмотреть таблицу NAT'a можно как-то?

Воспользуйтесь командой: #

Воспользуйтесь командой:

# pfctl -s state

 

pfctl -snat

pfctl -snat

pfctl -s nat выводит список

pfctl -s nat выводит список правил НАТ-а, а чтобы просмотреть таблицу преобразований необходимо вводить именно pfctl -s state

Пример вывода pfctl -s nat:

nat pass on vlan292 inet from 172.20.0.0/16 to any -> 111.22.33.111

Пример вывода pfctl -s state:

all udp 172.20.0.9:2052 -> 111.22.33.111:62788 -> 193.227.206.51:53       MULTIPLE:MULTIPLE
all tcp 172.20.0.13:63541 -> 111.22.33.111:53631 -> 46.72.130.194:28427       ESTABLISHED:ESTABLISHED
all udp 172.20.0.9:60847 -> 111.22.33.111:54310 -> 65.55.158.118:3544       MULTIPLE:MULTIPLE
all tcp 172.20.0.13:49370 -> 111.22.33.111:59254 -> 92.123.68.8:80       ESTABLISHED:ESTABLISHED
all tcp 172.20.0.13:49374 -> 111.22.33.111:55372 -> 92.123.68.8:80       ESTABLISHED:ESTABLISHED
all tcp 172.20.1.2:2537 -> 111.22.33.111:52371 -> 94.181.153.244:23761       ESTABLISHED:ESTABLISHED
all tcp 172.20.1.2:2557 -> 111.22.33.111:65008 -> 213.146.189.202:12350       ESTABLISHED:ESTABLISHED
all udp 172.20.0.9:64008 -> 111.22.33.111:53411 -> 94.198.55.93:32814       MULTIPLE:MULTIPLE
all udp 172.20.0.9:16451 -> 111.22.33.111:52671 -> 64.94.253.181:5062       MULTIPLE:MULTIPLE
all udp 172.20.0.12:49187 -> 111.22.33.111:64080 -> 65.55.158.118:3544       MULTIPLE:MULTIPLE
all udp 172.20.0.12:49187 -> 111.22.33.111:56321 -> 94.245.121.253:3544       SINGLE:NO_TRAFFIC
all tcp 172.20.0.12:49192 -> 111.22.33.111:53698 -> 77.123.2.207:29005       ESTABLISHED:ESTABLISHED
all tcp 172.20.0.12:49308 -> 111.22.33.111:60109 -> 212.161.8.2:12350       ESTABLISHED:ESTABLISHED
all udp 172.20.0.12:49187 -> 111.22.33.111:55447 -> 129.187.254.247:44981       MULTIPLE:MULTIPLE
all udp 172.20.0.12:26103 -> 111.22.33.111:58424 -> 87.251.136.26:52130       MULTIPLE:MULTIPLE
all tcp 172.20.0.7:49432 -> 111.22.33.111:50505 -> 129.6.15.28:13       ESTABLISHED:ESTABLISHED
all tcp 172.20.0.10:1303 -> 111.22.33.111:62433 -> 194.226.80.129:36549       ESTABLISHED:ESTABLISHED
all tcp 172.20.0.9:64337 -> 111.22.33.111:57432 -> 178.45.153.222:34091       ESTABLISHED:ESTABLISHED
all udp 172.20.0.12:26103 -> 111.22.33.111:58101 -> 46.42.43.54:16963       MULTIPLE:MULTIPLE

 

pfctl -sn #nat pfctl -sr

pfctl -sn #nat
pfctl -sr #rules

рекомендую The Book of PF 2nd Edition

ЗЫ: а вообще man pfctl оч помогает ))

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Вставай, Україно!

Литература

Не TCP мое IP!