Есть следующая система:
# lshw -short
H/W path Device Class Description
=============================================
system A7S8X-MX
/0 bus A7S8X-MX
/0/0 memory 128KiB BIOS
/0/4 processor AMD Sempron(tm) 2200+
/0/4/8 memory 128KiB L1 cache
/0/4/9 memory 256KiB L2 cache
/0/27 memory 256MiB System Memory
/0/27/0 memory DIMM [empty]
/0/27/1 memory 256MiB DIMM
/0/100 bridge 741/741GX/M741 Host
/0/100/1 bridge SiS AGP Port (virtual PCI-to-PCI bridge)
/0/100/1/0 display 661/741/760 PCI/AGP or 662/761Gx PCIE VGA Display Adapter
/0/100/2 bridge SiS964 [MuTIOL Media IO]
/0/100/2.5 storage 5513 [IDE]
/0/100/2.7 multimedia AC'97 Sound Controller
/0/100/3 bus USB 1.1 Controller
/0/100/3/1 usb2 bus OHCI Host Controller
/0/100/3.1 bus USB 1.1 Controller
/0/100/3.1/1 usb3 bus OHCI Host Controller
/0/100/3.2 bus USB 1.1 Controller
/0/100/3.2/1 usb4 bus OHCI Host Controller
/0/100/3.3 bus USB 2.0 Controller
/0/100/3.3/1 usb1 bus EHCI Host Controller
/0/100/4 eth0 network SiS900 PCI Fast Ethernet
/0/100/5 storage RAID bus controller 180 SATA/PATA [SiS]
/0/100/a eth1 network RTL-8139/8139C/8139C+
на ней стоит cds пока как samba/unix/dns/dhcp сервер + раздача инета nat-ом
инет раздается следующим скриптом:
cat /root/bin/firewall.sh
#!/bin/sh
TRUSTED_HOSTS="127.0.0.1/8 192.168.0.0/16"
source /root/bin/fireconfig.sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
stop(){
echo -e "\nStopping firewall..."
echo "Reset the default polices in the filter table: "
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
echo "Reset the default polices in the nat table: "
iptables -P PREROUTING ACCEPT -t nat
iptables -P POSTROUTING ACCEPT -t nat
iptables -P OUTPUT ACCEPT -t nat
echo "Reset the default polices in the mangle table: "
iptables -P PREROUTING ACCEPT -t mangle
iptables -P OUTPUT ACCEPT -t mangle
echo "Flushing rules and erase all chains: "
for t in $( cat /proc/net/ip_tables_names 2>/dev/null );do
iptables -F -t $t
iptables -X -t $t
done
echo "firewall was stopped"
}
start(){
echo "Accept all incoming estabilished connections"
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
echo "Accept ICMP echo-request"
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
echo "Accept all outgoing connections (set default action)"
iptables -P OUTPUT ACCEPT
echo "Accept all connections from internal network"
for eth in lo ${IF_INTERNAL};do
echo -e "\t- Accept all connections over '$eth' network interface"
iptables -I INPUT -i "$eth" -j ACCEPT;
done
echo "Accept all connections from trusted hosts"
for h in ${TRUSTED_HOSTS};do
echo -e "\t- Accept all connections from host $h"
iptables -A INPUT -s "$h" -j ACCEPT
done
echo "Accept all connections to shared ports from inet"
for p in ${SHARED_PORTS};do
if [ -n "${p//[0-9]/}" ];then
echo -e "\t- Accept all incoming connections to TCP and UDP ports $p"
iptables -A INPUT -m multiport -p TCP --dports "$p" -i "${IF_REAL}" -j ACCEPT
iptables -A INPUT -m multiport -p UDP --dports "$p" -i "${IF_REAL}" -j ACCEPT
else
echo -e "\t- Accept all incoming connections to TCP and UDP port $p"
iptables -A INPUT -p TCP --dport $p -i "${IF_REAL}" -j ACCEPT
iptables -A INPUT -p UDP --dport $p -i "${IF_REAL}" -j ACCEPT
fi
done
echo "Set default action for incoming connections a DROP"
iptables -P INPUT DROP
echo "Add NAT rules..."
for ipin in ${IP_INTERNAL}; do
echo -e "\t- Add rule to ${ipin}"
iptables -t nat -A POSTROUTING -s "${ipin}" -o "${IF_REAL}" -j SNAT --to "${IP_REAL}"
done
#echo "Redirect all SMTP conections from world (to ${IF_REAL}:25) to ${MAIL_SRV}"
#iptables -t nat -p tcp --dport 25 -A PREROUTING -i "${IF_REAL}" -j DNAT --to-destination "${MAIL_SRV}"
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/conf/all/send_redirects
}
show(){
echo -e "Internet interface "${IF_REAL}" has ip "${IP_REAL}
echo -e "internal interface(s) <"${IF_INTERNAL}"> has ip(s) <"${IP_INTERNAL}">"
echo -e "TRUSTED_HOSTS=${TRUSTED_HOSTS}\nSHARED_PORTS=${SHARED_PORTS}"
for t in $( cat /proc/net/ip_tables_names 2>/dev/null );do
echo -e "\n--------\nTable: $t"
iptables -t $t -L -n
done
}
case "$1" in
start|reload|restart)
stop
start;;
stop)
stop;;
show)
show;;
*)
echo "Usage: $0 {start|stop|restart|reload|show}"
exit 1;;
esac
cat /root/bin/fireconfig.sh
#!/bin/sh
export TRUSTED_HOSTS=""
export SHARED_PORTS="22"
export IF_REAL=eth1
export IP_REAL=`/sbin/ifconfig "${IF_REAL}"| /usr/bin/awk '2==NR && "inet"==$1{split($2,a,":");print a[2];}'`
export IF_INTERNAL="eth0"
export IP_INTERNAL=` for i in ${IF_INTERNAL}; do
#/sbin/ifconfig "$i"| /usr/bin/awk '"inet"==$1{split($2,i,":");split($4,m,":");print i[2]"/"m[2]}';
[ -x '/sbin/ip' ] && ip addr show "$i"|awk '"inet"==$1{print($2)}' ||
/sbin/ifconfig "$i"|
/usr/bin/awk '"inet"==$1{split($2,p1,":");split($3,p2,":");split($4,p3,":");
if("addr"==p1[1]){
if("Mask"==p2[1])print(p1[2]"/"p2[2]);
else if("Mask"==p3[1])print(p1[2]"/"p3[2]);};}'
done`
С родным ядром от cds дистфилесы за натом качались на скорости порядка 5-8 Kbit/s, на самом же сервере - скорость была порядка 2Mbit. Изза nat-а поднять скорость можно было, но лишь качая во много потоков (к примеру firefox-ом с плагином DownThemAll).
грешил на многое - от свич-хаба-мыльницы, до хитрых настроек закачки дистфилисов wget-ом.
Однако решил пересобрать ядро под свою систему. После этого проблема исчезла.
При настройке ядра убрал лишние ata/snd драйвера, нужное вкомпилил в ядро. ВЫБРАЛ АРХИТЕКТУРУ СВОЮ, а не Pentium PRO, отключил ipv6, включил CONFIG_BRIDGE_NF_EBTABLES, отключил поддержку pcie(ибо нет на этой матплате)и дров под разные ноуты включил CONFIG_PRINTK_TIME, и еще по мелочи.
В результате - проблема решена. Не знаю какое из моих действий было ключевым, но думаю, что это повод для того чтоб или пересмотреть набор ключей ядра или в хаутушку добавить пункт настоятельно рекомендующий пересобрать ядро под себя.