Jump to content
Калькуляторы

FreeBSD 7 + большое кол-во пробросов через ipfwnat Использование FreeBSD 7 ipfwnat для проброса udp/tcp портов, редкий сл

Приветствую!

 

Имеется игровой проект с разными играми (контра, battlefield, left4dead и т.д.). Весь проект обслуживают 3 машины.

 

 

сервер1

ос: 7.2-RELEASE-p6 FreeBSD 7.2-RELEASE-p6

задача: mysql база, прием входящий подключений и проброс их на остальные сервера при помощи ipfwnat (ядерный нат)

железо: Intel Celeron 1x 1.80 mhz, внешняя сетевая fxp0 (100 mb), внутренняя сетевая fxp1 (100 mb), 4 gb ddr 2

конфиг ядра:

cpu             I686_CPU
ident           kern

options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=100
options         IPFIREWALL_NAT
options         LIBALIAS
options         ROUTETABLES=2
options         ACCEPT_FILTER_HTTP
options         HZ=1000
options         DEVICE_POLLING
options         KVA_PAGES=512

device          pci
device          fdc
device          ata
device          sc
device          pmtimer

 

 

сервер2

ос freebsd 7.2

задачи: игровые сервера

железо: Процессор 2x 2.6 intel dual core, 4 GB DDR 2. Ядро custom

 

сервер3

ос freebsd 7.2

задачи: игровые сервера

железо: Процессор 2x 2.6 intel dual core, 4 GB DDR 2. Ядро custom

 

 

 

многие могут догадаться что многие игры являются очень чувствительны к задержкам, проще говоря к пингу (преимущественно по UDP). в моем случае часть игр как раз из такой категории. проблема заключается в том, что любители игры КС в часто жалуются на высокий пинг, проблема явно находится где-то в моей структуре, а не у провайдера (проверяли несколько раз). в проблеме не могу винить:

 

- само игровое ПО/игровой сервер (проверенно несколькими тестами)

- провайдера (проверено). если подключаться к играм без НАТ-а, т.е. напрямую по внешним IP адресам - никаких лагов и задержек

- сервер2 и сервер3 (исключено благодаря разнообразным тестам), нагрузка на эти машины вполне приемлемая, их потенциал не используется даже на 50%

 

подозрение пало на сервер1, приведу некоторые данные этой машины:

rc.conf

ifconfig_fxp0="inet 1.1.1.1  netmask 255.255.255.248"
ifconfig_fxp1="inet 192.168.1.1  netmask 255.255.0.0"


firewall_enable="YES"
firewall_logging="YES"
firewall_type="CUSTOM"
firewall_script="/etc/ipfw/ipfw"
firewall_quiet="YES"
ipfw_enable="YES"
gateway_enable="YES"

 

sysctl.conf

net.inet.tcp.delayed_ack=0

net.local.stream.recvspace=65535
net.local.stream.sendspace=65535
net.inet.tcp.sendspace=131072
net.inet.tcp.recvspace=131072
net.inet.ip.fw.verbose_limit=10

net.inet.tcp.nolocaltimewait=1
net.inet.ip.fastforwarding=1

net.inet.ip.fw.dyn_buckets=2048

kern.maxfiles=200000

kern.timecounter.hardware=TSC

net.inet.icmp.maskrepl=0
net.inet.ip.random_id=1
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
net.inet.tcp.keepidle=14400
net.inet.tcp.keepintvl=150

net.inet.icmp.bmcastecho=0
net.inet.icmp.icmplim=50
kern.ipc.somaxconn=32768
net.link.ether.inet.max_age=1200
net.inet.icmp.maskrepl=0
net.inet.ip.sourceroute=0
net.inet.ip.accept_sourceroute=0
net.inet.icmp.bmcastecho=0
net.inet.tcp.msl=7500

security.bsd.see_other_uids=0
security.bsd.see_other_gids=0

net.inet.ip.fw.one_pass=1

hw.syscons.bell=0

 

 

loader.conf

alias_ftp_load="YES"
net.inet.tcp.hostcache.hashsize="16384"
net.inet.tcp.hostcache.bucketlimit="100"
vm.kmem_size=1G

 

 

правила ipfw

FwCMD="/sbin/ipfw -q"
LanIn="fxp1"
LanOut="fxp0"
IpIn="192.168.1.1"
IpOut="1.1.1.1"
NetMask="24"



server2="192.168.1.20"
server3="192.168.1.30"
admin="192.168.1.100"


${FwCMD} -f flush


${FwCMD} add allow ip from any to any via lo0

${FwCMD} add deny ip from any to 127.0.0.0/8
${FwCMD} add deny ip from 127.0.0.0/8 to any


${FwCMD} add reject tcp from any to any tcpflags fin, syn, rst, psh, ack, urg
${FwCMD} add reject tcp from any to any tcpflags !fin, !syn, !rst, !psh, !ack, !urg
${FwCMD} add reject tcp from any to any not established tcpflags fin
${FwCMD} add reject log ip from any to any not verrevpath in



${FwCMD} add deny ip from any to 192.168.0.0/16 in recv ${LanOut}
${FwCMD} add deny ip from 192.168.0.0/16 to any in recv ${LanOut}
${FwCMD} add deny ip from any to 172.16.0.0/12 in recv ${LanOut}
${FwCMD} add deny ip from 172.16.0.0/12 to any in recv ${LanOut}
${FwCMD} add deny ip from any to 169.254.0.0/16 in recv ${LanOut}
${FwCMD} add deny ip from 169.254.0.0/16 to any in recv ${LanOut}



${FwCMD} add deny udp from me to 207.38.0.0/16 dst-port 29900-29910

${FwCMD} add deny icmp from any to any frag
${FwCMD} add allow icmp from any to any via ${LanIn}
${FwCMD} add allow icmp from any to ${IpOut} in via ${LanOut} icmptype 3,8,12
${FwCMD} add allow icmp from ${IpOut} to any out via ${LanOut} icmptype 0,3,4,11,12
${FwCMD} add allow icmp from ${IpOut} to any out via ${LanOut} frag


${FwCMD} add allow tcp from any to any out via ${LanIn}
${FwCMD} add allow udp from any to any out via ${LanIn}

${FwCMD} add allow udp from any 53 to any via ${LanIn}

${FwCMD} add allow tcp from any to any 10000 in via ${LanIn}
${FwCMD} add allow tcp from any to any 10000 in via ${LanOut}

${FwCMD} add allow tcp from ${admin} to any 22 in via ${LanOut}

${FwCMD} add allow tcp from any to ${IpOut} 80 limit src-addr 30
${FwCMD} add allow tcp from any to any 80 in via ${LanIn}

${FwCMD} add allow tcp from ${admin} to any 3389 in via ${LanOut}

${FwCMD} add allow tcp from ${server2} to any 3306 in via ${LanIn}
${FwCMD} add allow tcp from ${server3} to any 3306 in via ${LanIn}

${FwCMD} add allow tcp from any to any 6660-7000 via ${LanIn}
${FwCMD} add allow tcp from any to any 6660-7000 via ${LanOut}

${FwCMD} add allow udp from any to ${IpOut} 123 limit src-addr 3
${FwCMD} add allow udp from any to any 123 via ${LanIn}

${FwCMD} add allow tcp from any to any 22122 via ${LanIn}

${FwCMD} nat 1 config log if ${LanOut} deny_in same_ports \
redirect_port tcp ${server2}:22 10004 \
redirect_port tcp ${server3}:22 10006 \
redirect_port tcp ${server2}:21 20002 \
redirect_port tcp ${server2}:82 82 \
redirect_port udp ${server2}:82 82 \
redirect_port tcp ${server2}:2106 2106 \
redirect_port tcp ${server3}:7777 7777 \
redirect_port udp ${server2}:8888-8889 8888-8889 \
redirect_port tcp ${server2}:8889 8889 \
redirect_port udp ${server2}:27960-27965 27960-27965 \
redirect_port udp ${server2}:7777-7778 7777-7778 \
redirect_port tcp ${server2}:8777 8777 \
redirect_port udp ${server2}:27021 27021 \
redirect_port udp ${server3}:27016 27016 \
redirect_port udp ${server2}:27017 27017 \
redirect_port udp ${server3}:27018 27018 \
redirect_port tcp ${server2}:29999 29999 \
redirect_port udp ${server2}:29999 29999 \
redirect_port udp ${server2}:27015 27015 \
redirect_port udp ${server2}:27020 27020 \
redirect_port udp ${server3}:27022 27022 \
redirect_port udp ${server3}:27023 27023 \
redirect_port udp ${server3}:27024 27024 \
redirect_port udp ${server3}:27025 27025 \
redirect_port udp ${server2}:6666 6666 \
redirect_port udp ${server2}:6667 6667 \
redirect_port udp ${server2}:6668 6668 \
redirect_port udp ${server2}:6669 6669 \
redirect_port udp ${server2}:6791 6791 \
redirect_port udp ${server2}:23073 23073 \
redirect_port udp ${server2}:23074 23073 \
redirect_port udp ${server2}:23196 23196 \
redirect_port udp ${server2}:23197 23197 \
redirect_port tcp ${server2}:23073 23073 \
redirect_port tcp ${server2}:23074 23074 \
redirect_port tcp ${server2}:13000 13000 \
redirect_port tcp ${server3}:52999 52999 \
redirect_port udp ${server2}:28960 28960 \
redirect_port udp ${server2}:3838 3838
${FwCMD} add nat 1 ip from any to any via ${LanOut}

${FwCMD} nat 2 config log if ${LanIn} reset same_ports
${FwCMD} add nat 2 ip from any to any via ${LanIn}


${FwCMD} add deny log ip from any to any

 

Прикладываю некоторую диагностическую информацию, которая надеюсь поможет участникам подсказать мне что может повышать пинг в играх:

 

# ipfw nat show

nat 2: icmp=0, udp=326, tcp=166, pptp=0, proto=0, frag_id=0 frag_ptr=0 / tot=492
nat 1: icmp=0, udp=404, tcp=128, pptp=0, proto=0, frag_id=0 frag_ptr=0 / tot=532

# ifconfig

fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=8<VLAN_MTU>
        ether 00:a0:c9:69:04:1c
        inet 1.1.1.1 netmask 0xfffffff8 broadcast 1.1.1.95
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
fxp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=2009<RXCSUM,VLAN_MTU,WOL_MAGIC>
        ether 00:02:b3:2b:61:66
        inet 192.168.1.1 netmask 0xffff0000 broadcast 10.2.255.255
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        inet 127.0.0.1 netmask 0xff000000

# netstat -bdhI fxp1 -w1

            input         (fxp1)           output
   packets  errs      bytes    packets  errs      bytes colls drops
      2.1K     0       456K       2.0K     0       633K     0     0
      2.0K     0       480K       1.6K     0       1.2M     0     0
      2.3K     0       571K       2.0K     0       1.8M     0     0
      3.0K     0       427K       2.5K     0       2.0M     0     0
      3.4K     0       464K       3.0K     0       2.1M     0     0
      3.2K     0       534K       2.7K     0       1.7M     0     0
      3.7K     0       345K       3.3K     0       629K     0     0
      2.6K     0       252K       2.2K     0        92K     0     0
      1.6K     0       292K       1.3K     0       611K     0     0
      1.7K     0       510K       1.2K     0       1.8M     0     0
      2.8K     0       313K       2.3K     0       523K     0     0
      2.6K     0       327K       2.2K     0       508K     0     0
      2.4K     0       324K       1.9K     0       833K     0     0
      2.1K     0       281K       1.7K     0       450K     0     0
      1.5K     0       365K       1.2K     0       529K     0     0

# netstat -bdhI fxp0 -w1

            input         (fxp0)           output
   packets  errs      bytes    packets  errs      bytes colls drops
      1.2K    29       110K       1.4K     0       239K     0     0
      1.2K    30       107K       1.3K     0       263K     0     0
      1.1K    32       134K       1.2K     0       303K     0     0
      1.2K    33       154K       1.2K     0       449K     0     0
      1.3K    38       147K       1.3K     0       367K     0     0
      1.3K    60       137K       1.7K     0       277K     0     0
      1.2K    37       124K       1.5K     0       371K     0     0
      1.2K    35       142K       1.6K     0       304K     0     0
      1.1K    30       119K       1.6K     0       403K     0     0
      1.3K    34       110K       1.8K     0       259K     0     0
      1.2K    33       108K       1.6K     0       253K     0     0
      1.2K    27       116K       1.6K     0       258K     0     0

 

# vmstat -z | grep -v "0$"

ITEM                     SIZE     LIMIT      USED      FREE  REQUESTS  FAILURES

64 Bucket:                268,        0,       14,       28,      209,        7
128 Bucket:               524,        0,     2112,        2,    32430,     3953

 

# top -SH

last pid: 95318;  load averages:  0.08,  0.08,  0.02                                                                                                                up 18+18:39:16  13:48:42
104 processes: 2 running, 89 sleeping, 13 waiting
CPU:  0.0% user,  0.0% nice,  0.0% system,  4.5% interrupt, 95.5% idle
Mem: 113M Active, 2714M Inact, 288M Wired, 45M Cache, 199M Buf, 92M Free
Swap: 1000M Total, 20K Used, 1000M Free

  PID USERNAME PRI NICE   SIZE    RES STATE    TIME   WCPU COMMAND
   11 root     171 ki31     0K     8K RUN    418.8H 95.75% idle: cpu0
   21 root     -68    -     0K     8K WAIT   425:54  1.56% irq23: fxp1
   20 root     -68    -     0K     8K WAIT   351:15  1.37% irq22: fxp0
   32 root      20    -     0K     8K syncer  55:02  0.00% syncer
   15 root      44    -     0K     8K -       44:42  0.00% yarrow
   12 root     -32    -     0K     8K WAIT    23:03  0.00% swi4: clock sio

 

# vmstat -i

interrupt                          total       rate
irq1: atkbd0                         992          0
irq14: ata0                      8176384          5
irq19: atapci1                   3827136          2
irq22: fxp0                   1160119204        715
irq23: fxp1                   1144967163        705
cpu0: timer                   3244821193       1999
Total                         5561912072       3428

 

 

Надеюсь сообщение не выглядит слишком огромным, так же надеюсь на Вашу помощь. Проблема главная - у игроков высокий пинг при игре на игровых серверах, которые расположены на сервере2, сервере3, т.е. проблема кроется в сервере1, который является шлюзом и одновременно НАТ-сервером. Буду благодарен за любые подсказки, спасибо.

 

ps . Не исключаю что в моей настройке есть неправильные подходы и лишние параметры...

Edited by vspider

Share this post


Link to post
Share on other sites

1. Трафик никакой, но у вас почему то ошибки на одном из интерфейсов

2. Это не полный конфиг ядра, и в нём много лишнего

3. sysctl.conf net.inet.tcp и net.inet.upd к роутингу/нату отншения не имеют

4.

fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500

options=8<VLAN_MTU>

fxp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500

options=2009<RXCSUM,VLAN_MTU,WOL_MAGIC>

одна сетевушка встроенная?

(наверняка первая, в которой пакеты теряются)

 

5. вроде в ipfw можно и без ната порты пробрасывать, тогда будет 4 строчки со списком портов которые 1-1 на сервера и отдельные строчки для случаев с заменой номера порта.

Share this post


Link to post
Share on other sites
1. Трафик никакой, но у вас почему то ошибки на одном из интерфейсов

2. Это не полный конфиг ядра, и в нём много лишнего

3. sysctl.conf net.inet.tcp и net.inet.upd к роутингу/нату отншения не имеют

4.

fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500

options=8<VLAN_MTU>

fxp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500

options=2009<RXCSUM,VLAN_MTU,WOL_MAGIC>

одна сетевушка встроенная?

(наверняка первая, в которой пакеты теряются)

 

5. вроде в ipfw можно и без ната порты пробрасывать, тогда будет 4 строчки со списком портов которые 1-1 на сервера и отдельные строчки для случаев с заменой номера порта.

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

2. Не совсем понял, конфиг ядра тот, с которым собрано текущее ядро. Даже не знаю что из конфига ядра выкинуть, разьве что поддержку SMP

4. fpx0, fxp1 являются внешними сетевыми картами. Внутренняя карта имеется, но она отключена в биосе.

5. Очень удивлен такой информации, можете подсказать где можно прочитать про такой способ ?

Share this post


Link to post
Share on other sites

2. нет:

options INET #!b InterNETworking

options FFS #!b Berkeley Fast Filesystem

device atkbdc #!b AT keyboard controller

device atkbd #!b AT keyboard

device vga #!b VGA video card driver

device loop #!b Network loopback

device ether #!b Ethernet support

device pty #!b Pseudo-ttys (telnet etc) # only built-in

 

без них или вообще нечего делать - не загрузится или почти нечего делать.

uname -a что выдаёт?

сдаётся вы ядро не поставили, от которого конфиг.

 

4. Попробуйте заменить сетевуху на которой ошибки. Предварительно патчкорд поменяйте.

 

5. про fwd в man ipfw

Share this post


Link to post
Share on other sites
2. нет:

options INET #!b InterNETworking

options FFS #!b Berkeley Fast Filesystem

device atkbdc #!b AT keyboard controller

device atkbd #!b AT keyboard

device vga #!b VGA video card driver

device loop #!b Network loopback

device ether #!b Ethernet support

device pty #!b Pseudo-ttys (telnet etc) # only built-in

 

без них или вообще нечего делать - не загрузится или почти нечего делать.

uname -a что выдаёт?

сдаётся вы ядро не поставили, от которого конфиг.

 

4. Попробуйте заменить сетевуху на которой ошибки. Предварительно патчкорд поменяйте.

 

5. про fwd в man ipfw

Прошу прощения, верный конфиг ядра :

 

cpu I686_CPU
ident kern


makeoptions DEBUG=-g

options SCHED_ULE
options PREEMPTION
options INET
options SCTP
options FFS
options SOFTUPDATES
options UFS_ACL
options UFS_DIRHASH
options UFS_GJOURNAL
options NFSCLIENT
options NFSLOCKD
options CD9660
options PROCFS
options PSEUDOFS
options GEOM_PART_GPT
options GEOM_LABEL
options COMPAT_43TTY
options COMPAT_FREEBSD4
options COMPAT_FREEBSD5
options COMPAT_FREEBSD6
options STACK
options SYSVSHM
options SYSVMSG
options SYSVSEM
options _KPOSIX_PRIORITY_SCHEDULING
options ADAPTIVE_GIANT
options STOP_NMI
options AUDIT

options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
options IPFIREWALL_NAT
options LIBALIAS
options ROUTETABLES=2
options ACCEPT_FILTER_HTTP
options HZ=1000
options DEVICE_POLLING
options KVA_PAGES=512
options SMP
device apic

device pci

device fdc

device ata
device atadisk
device atapicd
options ATA_STATIC_ID

device atkbdc
device atkbd

device kbdmux

device vga

device splash

device sc

device agp

device pmtimer

device sio
device uart

device miibus
device fxp
device rl
device loop
device random
device ether
device sl
device ppp
device tun
device pty
device md
device firmware

device bpf

 

Конфиг для моих нужд подходит?

 

uname -a

FreeBSD gamers.place 7.2-RELEASE-p6 FreeBSD 7.2-RELEASE-p6 #0: Mon Nov 15 11:32:32 MSK 2010 root@gamers.place:/usr/src/sys/i386/compile/mykernel i386

 

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

Edited by vspider

Share this post


Link to post
Share on other sites

поллинг включен потому как раньше им пользовался, сейчас уже в нем нет необходимости. насколько мне известно, поллинг активен (в freebsd 7 и выше) только если прописать в /etc/rc.conf :

 

ifconfig_интерфейс="inet 192.168.77.1 netmask 255.255.255.0 polling"

 

в моем случае:

ifconfig_fxp0="inet 1.1.1.1  netmask 255.255.255.248"
ifconfig_fxp1="inet 192.168.1.1  netmask 255.255.0.0"

 

рекомендуете отключить поллинг из ядра ?

Edited by vspider

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this