URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID6
Нить номер: 18660
[ Назад ]

Исходное сообщение
"freebsd, polling, nat, pf"

Отправлено linspb , 13-Апр-09 17:25 
Подскажите,

есть
FreeBSD NAT.local 7.1-RELEASE FreeBSD 7.1-RELEASE #4: Mon Apr 13 13:13:25 MSD 2009     lin@NAT.local:/usr/obj/usr/src/sys/NAT  i386
на
CPU: Intel(R) Xeon(R) CPU            5130  @ 2.00GHz (2002.99-MHz 686-class CPU)

довольно быстро увеличивается kern.polling.lost_polls,
и при загрузке раза в потора - 1-2% потерь.

NAT# date && sysctl -a | grep kern.polling.lost_polls
Mon Apr 13 17:16:38 MSD 2009
kern.polling.lost_polls: 59263
NAT# date && sysctl -a | grep kern.polling.lost_polls
Mon Apr 13 17:16:50 MSD 2009
kern.polling.lost_polls: 59326

на машинке работает только pf как нат,
NAT# cat /etc/pf.conf | wc -l
     121
NAT# pfctl -ss | wc -l
   53976
NAT# netstat -I em1 -w 1
            input          (em1)           output
   packets  errs      bytes    packets  errs      bytes colls
     21339     0   12959348      21011     0   15596015     0
     22055     0   13660871      21458     0   15864442     0
     21531     0   13527641      20876     0   15296246     0
(ошибки если и бывают, то очень редко)

last pid:  1574;  load averages:  0.00,  0.00,  0.00                                                                                         up 0+03:39:24  17:18:58
72 processes:  3 running, 53 sleeping, 16 waiting
CPU:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idle
Mem: 9664K Active, 7076K Inact, 54M Wired, 88K Cache, 13M Buf, 1923M Free
Swap: 8192M Total, 8192M Free

  PID USERNAME  THR PRI NICE   SIZE    RES STATE  C   TIME   WCPU COMMAND
   11 root        1 171 ki31     0K     8K CPU1   1 217:31 100.00% idle: cpu1
   12 root        1 171 ki31     0K     8K RUN    0 173:52 100.00% idle: cpu0

NAT# vmstat -i
interrupt                          total       rate
irq1: atkbd0                         784          0
irq14: ata0                           58          0
irq20: atapci1                      3382          0
cpu0: timer                     19639914       1493
cpu1: timer                     19639758       1493
Total                           39283896       2988

в ядре
ident           NAT
device          pf
device          pflog
device          pfsync
options         DEVICE_POLLING
options         HZ=1500
options        IPFIREWALL
options         IPFIREWALL_DEFAULT_TO_ACCEPT
#makeoptions    DEBUG=-g

карточки
em0: flags=9843<UP,BROADCAST,RUNNING,SIMPLEX,LINK0,MULTICAST> metric 0 mtu 1500
em1: flags=9843<UP,BROADCAST,RUNNING,SIMPLEX,LINK0,MULTICAST> metric 0 mtu 1500

em0@pci0:5:0:0: class=0x020000 card=0x34848086 chip=0x10968086 rev=0x01 hdr=0x00
    vendor     = 'Intel Corporation'
    device     = 'PRO/1000 EB Network Connection'
    class      = network
    subclass   = ethernet

NAT# cat /etc/sysctl.conf | grep =
#security.bsd.see_other_uids=0
kern.polling.enable=1
net.isr.direct=0
kern.polling.each_burst=150
kern.polling.burst_max=1000
#net.inet.ip.intr_queue_maxlen=100
net.inet.ip.intr_queue_maxlen=256
#net.inet.ip.intr_queue_maxlen=5000
kern.ipc.maxsockbuf=8388608
#net.inet.tcp.sendspace=3217968
#net.inet.tcp.recvspace=3217968
net.inet.tcp.rfc1323=1
net.inet.tcp.sendspace=131072
net.inet.tcp.recvspace=131072
net.inet.icmp.icmplim=2000
net.inet.ip.fastforwarding=1
kern.ipc.somaxconn=10240
net.inet.udp.blackhole=1
net.inet.ip.redirect=1
kern.ipc.nmbclusters=32000

подскажите, как можно улучшить работу ната?


Содержание

Сообщения в этом обсуждении
"freebsd, polling, nat, pf"
Отправлено maxwell , 13-Апр-09 18:50 
>[оверквотинг удален]
>net.inet.tcp.sendspace=131072
>net.inet.tcp.recvspace=131072
>net.inet.icmp.icmplim=2000
>net.inet.ip.fastforwarding=1
>kern.ipc.somaxconn=10240
>net.inet.udp.blackhole=1
>net.inet.ip.redirect=1
>kern.ipc.nmbclusters=32000
>
>подскажите, как можно улучшить работу ната?

У меня ядерный нат, сетевые такие же, а вот поллинг в sysctl.conf закоменчен, включен в rc.conf

# cat /etc/sysctl.conf | grep =
security.bsd.see_other_uids=0
security.bsd.see_other_gids=0
kern.ipc.maxsockbuf=524288
kern.ipc.shmmax=67108864
kern.ipc.somaxconn=1024
net.inet.ip.ttl=255
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
net.inet.ip.check_interface=1
#net.inet.tcp.recvspace=65535
#net.inet.tcp.sendspace=65535
net.inet.tcp.drop_synfin=1
net.inet.tcp.syncookies=0
net.inet.icmp.bmcastecho=0
net.inet.icmp.maskrepl=0
net.inet.icmp.icmplim=100
net.inet.icmp.drop_redirect=1
net.inet.icmp.log_redirect=1
net.inet.ip.redirect=0
net.inet.icmp.maskrepl=0
net.inet.ip.sourceroute=0
net.inet.ip.accept_sourceroute=0
net.inet.icmp.bmcastecho=0
kern.fallback_elf_brand=3
#kern.polling.enable=1
#kern.polling.user_frac=50

options         IPFIREWALL
options         IPFIREWALL_FORWARD
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=100
options         IPFIREWALL_DEFAULT_TO_ACCEPT
options         IPFIREWALL_NAT
options         LIBALIAS
options         IPDIVERT
options         DUMMYNET
options         DEVICE_POLLING
options         HZ=1000

# date && sysctl -a | grep kern.polling.lost_polls
понедельник, 13 апреля 2009 г. 22:23:46
kern.polling.lost_polls: 37227

# date && sysctl -a | grep kern.polling.lost_polls
понедельник, 13 апреля 2009 г. 22:35:10
kern.polling.lost_polls: 37240

em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=db<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,POLLING,VLAN_HWCSUM>

em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=db<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,POLLING,VLAN_HWCSUM>

# cat /etc/rc.conf | grep em
ifconfig_em0="inet 192.168.77.1  netmask 255.255.255.0 polling"
ifconfig_em1="inet 192.168.48.1  netmask 255.255.255.252 polling"


"freebsd, polling, nat, pf"
Отправлено brr , 13-Апр-09 21:00 
>[оверквотинг удален]
>
>em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
>        options=db<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,POLLING,VLAN_HWCSUM>
>
>em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
>        options=db<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,POLLING,VLAN_HWCSUM>
>
># cat /etc/rc.conf | grep em
>ifconfig_em0="inet 192.168.77.1  netmask 255.255.255.0 polling"
>ifconfig_em1="inet 192.168.48.1  netmask 255.255.255.252 polling"

2модератор: уберите из форума оффтопик, сообщения, а так же сообщения на древне-украинском.


"freebsd, polling, nat, pf"
Отправлено linspb , 14-Апр-09 11:34 
>>[оверквотинг удален]
>2модератор: уберите из форума оффтопик, сообщения, а так же сообщения на древне-украинском.
>

а что тебе не нравиться?


"freebsd, polling, nat, pf"
Отправлено brr , 14-Апр-09 19:33 
>>>[оверквотинг удален]
>>2модератор: уберите из форума оффтопик, сообщения, а так же сообщения на древне-украинском.
>>
>
>а что тебе не нравиться?

мне не нравится почему в конференции по сетевому оборудованию кто-то создает темы соверешенно не относящиеся как к сетевым технологиям так и к ИТ в частности...


"freebsd, polling, nat, pf"
Отправлено linspb , 14-Апр-09 19:53 
>>>>[оверквотинг удален]
>мне не нравится почему в конференции по сетевому оборудованию кто-то создает темы
>соверешенно не относящиеся как к сетевым технологиям так и к ИТ
>в частности...

умный? Найди тему лучше для такого вопроса, а потом пиши...
не уж то заняться больше нечем?


"freebsd, polling, nat, pf"
Отправлено brr , 14-Апр-09 20:45 
>>>>>[оверквотинг удален]
>>мне не нравится почему в конференции по сетевому оборудованию кто-то создает темы
>>соверешенно не относящиеся как к сетевым технологиям так и к ИТ
>>в частности...
>
>умный? Найди тему лучше для такого вопроса, а потом пиши...
>не уж то заняться больше нечем?

я не задавал вопросов, я лишь констатировал факт.


"freebsd, polling, nat, pf"
Отправлено linspb , 14-Апр-09 23:43 
>>>>>>[оверквотинг удален]
>я не задавал вопросов, я лишь констатировал факт.

твой факт не верен в корне, и попрошу тебя не мешать обсуждениям,
лучше бы подсказал что по теме....


"freebsd, polling, nat, pf"
Отправлено TiFFolk , 15-Апр-09 13:24 
>[оверквотинг удален]
>net.inet.tcp.sendspace=131072
>net.inet.tcp.recvspace=131072
>net.inet.icmp.icmplim=2000
>net.inet.ip.fastforwarding=1
>kern.ipc.somaxconn=10240
>net.inet.udp.blackhole=1
>net.inet.ip.redirect=1
>kern.ipc.nmbclusters=32000
>
>подскажите, как можно улучшить работу ната?

Может
options         HZ=1500
Очень жирно?
У меня на 1000 работает.


"freebsd, polling, nat, pf"
Отправлено Confirm , 13-Апр-11 16:48 
Помогите пожалуйста разобраться, заранее извиняюсь, что чуть не в тему.Не получается при включенном pf выходить в инет сервера(шлюз,на котором pf), еще на этом компе запущен апач, так вот опять же при включенном фаерволе не удается к нему подключиться (как будто не запущен). Дело в правилах, подскажите пожалуйста как мне их подправить. Необходимо чтобы апач был доступен на обоих интерфейсах - внешнем и внутреннем. Стоит добавить, что в данный момент пускает по фтп (21 порт) и ссш (22 порт), т.е. видимо эти правила корректно заданы.
Привожу свой pf.conf

#------------------------------
# Макросы
#------------------------------

int_if="vr0"
ext_if="xl0"
int_ip="192.168.130.139"
ext_ip="10.0.39.36"
lannet = "192.168.130.0/24"
private_nets= "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, 0.0.0.0/8, 240.0.0.0/4
bsd = "192.168.130.139/24"
# Порты
client_ports = "{ 21, 22, 25, 110, 123, 80, 443, 3128, 3129, 3389,8080, >=49151 }"
admin_ports = "{ 5190, 33330:33340 }"
pbx_udp = "{ 2727, 4520, 4569, 5036, 5060, 10000:20000 }"
pbx_tcp = "{ 5060 }"
#------------------------------
# Нормализация
#------------------------------

# Определяем политику при блокировке пакетов
set block-policy return
# Поведение пакетного фильтра при использовании таблицы состояний
set state-policy floating
# Логируемый интерфейс
set loginterface $ext_if
# Максимальное количество записей в пуле отвечающем за нормализацию трафика (scrub)
# Максимальное количество вхождений в пул отвечающий за состояние таблицы состояний соединений (keep state)
set limit { frags 100000, states 100000 }
# Устанавливаем тип оптимизации
set optimization normal
# Игнорируем фильтрацию на кольцевом интерфейсе
set skip on lo0
# Нормализация всего входящего трафика на всех интерфейсах
scrub in all

#------------------------------
# NAT & RDR
#------------------------------

# NAT для локалки
nat on $ext_if inet from $lannet to any -> $ext_ip
# Отправляем локальных интернетчиков на squid.
rdr on $int_if proto tcp from $lannet to any port www -> 127.0.0.1 port 3129
# Пробрасываем порты на web сервер снаружи
rdr on $ext_if proto tcp from any to $ext_ip port www -> 127.0.0.1 port 80
# Пробрасываем порты на web сервер изнутри
rdr on $int_if proto tcp from $lannet to $int_ip port www -> 127.0.0.1 port 80
# Пробрасываем SSH
rdr on $ext_if proto tcp from any to $ext_ip port 33330 -> 127.0.0.1 port 22
# Пробрасываем FTP
rdr on $ext_if proto tcp from any to $ext_ip port 21 -> 127.0.0.1 port 21

#------------------------------
# Правила фильтрации
#------------------------------

# Защита от спуфинга
antispoof quick for { lo0, $int_if, $ext_if }
# Блокируем всё
block log all
# Блокируем тех, кто лезет на внешний интерфейс с частными адресами
block drop in quick on $ext_if from $private_nets to any
# Разрешаем icmp
pass inet proto icmp icmp-type echoreq
# Разрешаем DNS для локалки
pass in on $int_if proto udp from $lannet to $bsd port domain
# Тестовый полный выход для отладки
pass in on $int_if from $lannet to any
# Выпускаем клиентске сервисы
pass in on $int_if proto tcp from $lannet to any port $client_ports
# Разрешаем нашему шлюзу полный выход с обоих интерфейсов
pass out on $ext_if proto tcp from any to any
pass out on $ext_if proto udp from any to any keep state
pass out on $int_if proto tcp from any to any
pass out on $int_if proto udp from any to any keep state

#------------------------------
# Icoming #
#------------------------------

# Разрешаем входящий ssh
pass in log on $ext_if proto tcp from any to $ext_ip port 2200 flags S/SA synproxy state
# Разрешаем входящий www
pass in on $ext_if proto tcp from any to $ext_ip port 80 flags S/SA synproxy state
pass in on $int_if proto tcp from any to $int_ip port 80 flags S/SA synproxy state
# Разрешаем входящий https
pass in on $ext_if proto tcp from any to $ext_ip port https flags S/SA synproxy state
# Разрешаем входящий ftp
pass in on $ext_if proto tcp from any to $ext_ip port 21 flags S/SA synproxy state


"freebsd, polling, nat, pf"
Отправлено Confirm , 14-Апр-11 10:34 
Вообщем перепахал конфиг заново. Теперь на веб сервер пускает, но почему-то перестал пускать на фтп.На вусякий случай скажу, что фтп и веб сервер - это один комп, на котором и стоит pf, имеет 2 сетевые карты xl0 - в мир, vr0 - в свою сетку. Помогите разобраться почему не пускает по фтп из внутренней сетки? Из внешней не пробовал пока.
Привожу обновленный конфиг pf.conf

#------------------------------
# Макросы
#------------------------------

int_if="vr0"
ext_if="xl0"
int_ip="192.168.130.139"
ext_ip="10.0.39.36"
lannet = "192.168.130.0/24"
private_nets= "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, 0.0.0.0/8, 240.0.0.0/4

# Порты

client_ports = "{ 21, 22, 25, 110, 123, 80, 443, 3128, 3129, 3389,8080, >=49151 }"
admin_ports = "{ 5190, 33330:33340 }"

#------------------------------
# Нормализация
#------------------------------

# Определяем политику при блокировке пакетов
set block-policy drop
# Поведение пакетного фильтра при использовании таблицы состояний
set state-policy floating
# Логируемый интерфейс
set loginterface $ext_if
# Максимальное количество записей в пуле отвечающем за нормализацию трафика (scrub)
# Максимальное количество вхождений в пул отвечающий за состояние таблицы состояний соединений (keep state)
set limit { frags 100000, states 100000 }
# Устанавливаем тип оптимизации
set optimization normal
# Игнорируем фильтрацию на кольцевом интерфейсе
set skip on lo0
# Нормализация всего входящего трафика на всех интерфейсах
scrub in all
#------------------------------
# NAT & RDR
#------------------------------

# NAT для локалки
nat on $ext_if inet from $lannet to any -> $ext_ip
rdr on $ext_if proto tcp from any to $ext_ip port 2200 -> $int_ip port 22
rdr on $ext_if proto tcp from any to $ext_ip port 21 -> $int_ip port 21
rdr on $ext_if proto tcp from any to $ext_ip port 80 -> $int_ip port 80
rdr proto {tcp, udp} from any to any port 21 -> $int_ip port 21
#------------------------------
# Правила фильтрации
#------------------------------

# Блокируем всё
block all
# Блокируем тех, кто лезет на внешний интерфейс с частными адресами
block drop in quick on $ext_if from $private_nets to any
# Разрешаем icmp
pass inet proto icmp icmp-type echoreq
# Разрешаем DNS для локалки
pass in on $int_if proto udp from $lannet to $int_ip port domain
# Выпускаем админские сервисы
pass in on $int_if proto tcp from $int_ip to any port $admin_ports
pass out on $int_if proto tcp from $int_ip to any port $admin_ports
# Выпускаем клиентске сервисы
pass in on $int_if proto tcp from $lannet to any port $client_ports
pass out on $int_if proto tcp from $lannet to any port $client_ports
# Разрешаем нашему шлюзу полный выход с обоих интерфейсов
pass out on $ext_if proto tcp from any to any
pass out on $ext_if proto udp from any to any keep state
pass out on $int_if proto tcp from any to any
pass out on $int_if proto udp from any to any keep state
#------------------------------
# Icoming #
#------------------------------
# Разрешаем входящий ssh
pass in log on $ext_if proto tcp from any to $ext_ip port 2200 flags S/SA synproxy state
pass in log on $int_if proto tcp from any to $int_ip port 22 flags S/SA synproxy state
# Разрешаем входящий https
pass in on $ext_if proto tcp from any to $ext_ip port https flags S/SA synproxy state
# Разрешаем входящий www
pass in on $ext_if proto tcp from any to $ext_ip port www flags S/SA synproxy state
pass in on $int_if proto tcp from any to $int_ip port www flags S/SA synproxy state
# Разрешаем входящий ftp
anchor "ftp-proxy/*"

#pass in on $ext_if proto tcp from any to $ext_ip port 21
#pass out on $ext_if proto tcp from any to $ext_ip port 21
#pass in on $int_if proto tcp from any to $int_ip port 21
#pass out on $int_if proto tcp from any to $int_ip port 21