Прошу помощи т.к. сам уже несколько дней не могу решить проблему.
Ситуация: есть сервер выполняющий задачи шлюза. На нём Debian Lenny. Железо хорошее (хсенон 4х ядерный, 4Гб памяти. на нём ещё крутится Oracle). Доступ к сети ораничевается iptables. Когда сеть сильно не нагружена всё работает практически идеально, но если в сети присутствует повышенный трафик (>=512 килобит через шлюз в инет), то возникают проблемы: при доступе к сети с Linux машинок всё работает отлично, с Windows XP начинают терятся пакеты (~5-10%), а с Windows Vista теряется более половины пакетов. Я уже не знаю куда копать чтобы решить данную проблему.
Привожу скрипты для настройки iptables:
eth0 - внешний интерфейс, eth1 - внутренний, tap0 - OpenVPN другой сети, адрес внутренней сети 192.168.7.0/24. адреса 192.168.7.240/28 - для wifi пользователей с полным доступом к сети.
1. стандартный iptables для настройки:
Код:
#!/bin/sh
PATH=/usr/sbin:/sbin:/bin:/usr/bin
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
#
# удалить все действующие правила
#
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -P INPUT DROP
iptables -P FORWARD DROP
#iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
#############################################
# защита от подмены ip на wifi
iptables -N WIFI
# отправляем в спец. цепочку
iptables -A INPUT -i eth1 -p tcp --src 192.168.7.240/28 -j WIFI
iptables -A FORWARD -i eth1 -p tcp --src 192.168.7.240/28 -j WIFI
# проверяем на валидность мака
# shcoder
iptables -A WIFI -p tcp --src 192.168.7.250 -m mac --mac-source 00:19:d2:04:6c:60 -j RETURN
# masha
iptables -A WIFI -p tcp --src 192.168.7.251 -m mac --mac-source 00:13:02:85:8c:64 -j RETURN
# semka
iptables -A WIFI -p tcp --src 192.168.7.252 -m mac --mac-source 00:1f:5b:c0:c0:46 -j RETURN
# evgeny
iptables -A WIFI -p tcp --src 192.168.7.253 -m mac --mac-source 00:23:6c:05:4b:64 -j RETURN
# ajas
iptables -A WIFI -p tcp --src 192.168.7.254 -m mac --mac-source 00:23:6c:06:7a:25 -j RETURN
# evdsl
iptables -A WIFI -p tcp --src 192.168.7.249 -m mac --mac-source 00:22:fc:54:9a:ee -j RETURN
# sergey
iptables -A WIFI -p tcp --src 192.168.7.240 -m mac --mac-source 00:1f:3c:3d:9c:a3 -j RETURN
# evdsl
iptables -A WIFI -p tcp --src 192.168.7.241 -m mac --mac-source 00:22:fc:54:9a:ee -j RETURN
# new1
iptables -A WIFI -p tcp --src 192.168.7.242 -m mac --mac-source 00:19:d2:22:52:3e -j RETURN
# anka
iptables -A WIFI -p tcp --src 192.168.7.243 -m mac --mac-source 00:16:ea:58:07:aa -j RETURN
# masha2
iptables -A WIFI -p tcp --src 192.168.7.244 -m mac --mac-source 00:1f:3b:80:e2:2f -j RETURN
# acer2
iptables -A WIFI -p tcp --src 192.168.7.245 -m mac --mac-source 00:1f:3a:3a:d5:3e -j RETURN
# aleksey-mobile
iptables -A WIFI -p tcp --src 192.168.7.246 -m mac --mac-source 00:21:fe:61:00:bd -j RETURN
#
iptables -A WIFI -p tcp --src 192.168.7.247 -m mac --mac-source 00:14:92:02:e1:87 -j RETURN
# дропаем всё остальное
iptables -A WIFI -j DROP
#############################################
# цепочка для разрешений доступа к сети ITC
iptables -N ITC
# отправляем в цепочку трафик к ITC
iptables -A FORWARD -i eth1 -o tap0 -p tcp --src 192.168.7.0/24 --dst 192.168.0.0/24 -j ITC
iptables -A FORWARD -i eth1 -o tap0 -p udp --src 192.168.7.0/24 --dst 192.168.0.0/24 -j ITC
iptables -A FORWARD -i eth1 -o tap0 -p icmp --src 192.168.7.0/24 --dst 192.168.0.0/24 -j ITC
# shcoder
iptables -A ITC -p tcp --src 192.168.7.250 -j ACCEPT
iptables -A ITC -p udp --src 192.168.7.250 -j ACCEPT
iptables -A ITC -p icmp --src 192.168.7.250 -j ACCEPT
# semka
iptables -A ITC -p tcp --src 192.168.7.42 -j ACCEPT
iptables -A ITC -p udp --src 192.168.7.42 -j ACCEPT
iptables -A ITC -p icmp --src 192.168.7.42 -j ACCEPT
# Maks
iptables -A ITC -p tcp --src 192.168.7.33 -j ACCEPT
iptables -A ITC -p udp --src 192.168.7.33 -j ACCEPT
iptables -A ITC -p icmp --src 192.168.7.33 -j ACCEPT
# evdsl
#iptables -A ITC -p tcp --src 192.168.7.34 -j ACCEPT
#iptables -A ITC -p udp --src 192.168.7.34 -j ACCEPT
#iptables -A ITC -p icmp --src 192.168.7.34 -j ACCEPT
# ajas
#iptables -A ITC -p tcp --src 192.168.7.34 -j ACCEPT
#iptables -A ITC -p udp --src 192.168.7.34 -j ACCEPT
#iptables -A ITC -p icmp --src 192.168.7.34 -j ACCEPT
# drop other
iptables -A ITC -j DROP
##############################################
# common
# Всегда принимать трафик на loopback-интерфейсе
iptables -A INPUT -i lo -j ACCEPT
# Разрешить соединения, которые инициированы изнутри (eth1)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i eth1 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i tap0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o tap0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# разрешения на подключения к разным сервисам
#base
iptables -A INPUT -i eth0 -p tcp -m multiport --dport 22,80,443,25,110 -j ACCEPT
# oracle
iptables -A INPUT -i eth0 -p tcp -m multiport --dport 1521 -j ACCEPT
# Oracle em console
iptables -A INPUT -i eth0 -p tcp -m multiport --dport 1158 -j ACCEPT
# Разрешить доступ из LAN-сети к внешним сетям
#iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
# открытие пробрасывания портов
# SSH
iptables -A FORWARD -i eth1 -p tcp --dport 22 -o eth0 -j ACCEPT
# IRC
iptables -A FORWARD -i eth1 -p tcp -m multiport --dport 6667:6669 -o eth0 -j ACCEPT
# ICQ
iptables -A FORWARD -i eth1 -p tcp --dport 5190 -o eth0 -j ACCEPT
# Jabber
iptables -A FORWARD -i eth1 -p tcp -m multiport --dport 5222,5223 -o eth0 -j ACCEPT
# Mail
iptables -A FORWARD -i eth1 -p tcp -m multiport --dport 25,110,143,995,465,993,587 -o eth0 -j ACCEPT
# Skype
iptables -A FORWARD -i eth1 -p tcp -m multiport --dport 23399,14094,64001 -o eth0 -j ACCEPT
# Oracle
iptables -A FORWARD -i eth1 -p tcp --dport 1521 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth1 -p udp --sport 7695 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth1 -p tcp -m multiport --dport 56861,64538,13534,6562 -o eth0 -j ACCEPT
# RDP
iptables -A FORWARD -i eth1 -p tcp -m multiport --dport 3389,435 -o eth0 -j ACCEPT
#мониторинг для Жени
iptables -A FORWARD -i eth1 -p tcp --dport 4701 -o eth0 -j ACCEPT
# OpenVPN
iptables -A FORWARD -i eth1 -p tcp -m multiport --dport 1194,1195 -o eth0 -j ACCEPT
# PPTP
iptables -A FORWARD -i eth1 -p tcp --dport 1723 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth1 -p gre -j ACCEPT
# ICMP
iptables -A FORWARD -i eth1 -p icmp -j ACCEPT
# FTP
iptables -A FORWARD -i eth1 -p tcp --dport 21 -o eth0 -j ACCEPT
# www -> squid
iptables -t nat -A PREROUTING -i eth1 -p tcp --src 192.168.7.240/28 -m multiport --dport 80,8080 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth1 -p tcp --src 192.168.7.5 -m multiport --dport 80,8080 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth1 -p tcp --src 192.168.7.7 -m multiport --dport 80,8080 -j REDIRECT --to-port 3128
# прямой доступ для wifi клиентов
iptables -A FORWARD -i eth1 -p tcp --src 192.168.7.240/28 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth1 -p udp --src 192.168.7.240/28 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth1 -p tcp --src 192.168.7.5 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth1 -p udp --src 192.168.7.5 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth1 -p tcp --src 192.168.7.7 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth1 -p udp --src 192.168.7.7 -o eth0 -j ACCEPT
# Masquerade.
#iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 77.236.84.166
iptables -t nat -A POSTROUTING -o tap0 -j MASQUERADE
# Запретить forward извне во внутреннюю сеть
#iptables -A FORWARD -i eth0 -o eth1 -j REJECT
# Включить forward
echo 1 > /proc/sys/net/ipv4/ip_forward2. минимальные огранчения iptables:
Код:
#!/bin/sh
PATH=/usr/sbin:/sbin:/bin:/usr/bin
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
#
# удалить все действующие правила
#
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -P INPUT DROP
iptables -P FORWARD DROP
#iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
##############################################
# common
# Всегда принимать трафик на loopback-интерфейсе
iptables -A INPUT -i lo -j ACCEPT
# Разрешить соединения, которые инициированы изнутри (eth1)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i eth1 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# разрешения на подключения к разным сервисам
# all internal
iptables -A INPUT -i eth1 -j ACCEPT
# drop inernal adderss from external interface
iptables -A INPUT -i eth0 -p tcp --src 192.168.7.0/24 -j DROP
iptables -A INPUT -i eth0 -p udp --src 192.168.7.0/24 -j DROP
iptables -A INPUT -i eth0 -p icmp --src 192.168.7.0/24 -j DROP
# ping
iptables -A INPUT -p icmp -j ACCEPT
#base
iptables -A INPUT -i eth0 -p tcp -m multiport --dport 22,80,443,25,110 -j ACCEPT
# oracle
iptables -A INPUT -i eth0 -p tcp -m multiport --dport 1521 -j ACCEPT
# Oracle em console
iptables -A INPUT -i eth0 -p tcp -m multiport --dport 1158 -j ACCEPT
# Разрешить доступ из LAN-сети к внешним сетям
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth1 -p gre -j ACCEPT
# www -> squid
iptables -t nat -A PREROUTING -i eth1 -p tcp --src 192.168.7.0/24 -m multiport --dport 80,8080 -j REDIRECT --to-port 3128
# Masquerade.
#iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 77.236.84.166
# Включить forward
echo 1 > /proc/sys/net/ipv4/ip_forward3. скрипт убирающий все ограничения с iptables:
Код:
#!/bin/sh
PATH=/usr/sbin:/sbin:/bin:/usr/bin
#
# удалить все действующие правила
#
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -P INPUT ACCEPT
#iptables -P FORWARD DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
# Masquerade.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 77.236.84.166
# Включить forward
echo 1 > /proc/sys/net/ipv4/ip_forwardЕсли запустить последний скипт - то пинг даже с висты становится достаточно стабильным, а если запустить любой из первых двух, то половина пингов будет теряться.
Помогити, подскажите куда копать?