мультиплексный канал

Доброго времени суток.

Встала следующая проблема. Есть два ADSL канала, настроил роутер под Gentoo.
каким образои организовать мультиплексирование трафика, т.е. балансировку нагрузки на оба канала?
говоря проще, из сети на роутер приходит пакет, роутер выбирает наименее загруженный канал и отправляет пакет.
Это вроде как-то делается в связке iptables+iproute2, но как?

Можно и просто

Можно и просто на iptables: http://tetro.net/misc/multilink.html
Можно и средствами iproute2: http://luxik.cdi.cz/~devik/qos/htb/manual/userg.htm

спасибо

big thanks!
буду пробовать.

help

Люди добрые, помогите.
Не спец я ни в iptables, ни в iproute2.
второй день головой об стенку бьюсь, немогу наладить эту схему.
Что имеем.

Цитата:
eth0 - 192.168.1.4; gw - 192.168.1.1 (ADSL modem)
eth2 - 192.168.0.103; gw - 192.168.0.1 (ADSL modem) - default gaterway
eth1 - 192.168.10.1 - intrenal network.

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

В соответсвии с данной статьей настроил multilink:
http://tetro.net/misc/multilink.html

Цитата:
iptables -t nat -A POSTROUTING -o eth0 -s ! 192.168.1.0/24 -m state --state NEW,RELATED -j MASQUERADE

iptables -t mangle -N NEW_OUT_CONN

iptables -t mangle -A OUTPUT -o eth2 -m state --state NEW -j NEW_OUT_CONN

iptables -t mangle -A OUTPUT -m connmark --mark 2 -j ROUTE --gw 192.168.1.1 --continue

iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 0
iptables -t mangle -A NEW_OUT_CONN -m random --average 50 -j RETURN
iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 2

работает, но только с локального машины, т.е. действительно работает мультиплексный канал, но с других машин NAT не пропускает. если след. правила в цепочке:

Цитата:
iptables -t nat -A POSTROUTING -o eth0 -s ! 192.168.1.0/24 -m state --state NEW,RELATED -j MASQUERADE
iptables -t mangle -A OUTPUT -m connmark --mark 2 -j ROUTE --gw 192.168.1.1 --continue

заменить на

Цитата:
iptables -t nat -A POSTROUTING -o eth2 -s ! 192.168.0.0/24 -m state --state NEW,RELATED -j MASQUERADE
iptables -t mangle -A OUTPUT -m connmark --mark 2 -j ROUTE --gw 192.168.0.1 --continue

то NAT работает, но мультилинк уже нет.
P.S.: акцентирую внимание, что default gaterway - 192.168.0.1

где я туплю? пробовал различные варианты с использованием iproute2 - вообще не получилось настроить. ниже пример конфигурации с использованием iptables/iproute2:

Цитата:
#!/bin/sh

# Iptables userspace executable
IPTABLES="/sbin/iptables"
# Internal Interface
NET_INT_INT=eth1
# Internal IP
NET_INT_IP=192.168.10.1
# Internal Subnet
NET_INT_SUB=24
# Internal Network
NET_INT_NET=192.168.10.0
# First external interface
NET_EXT_INT1=eth0
# First external IP
NET_EXT_IP1=192.168.1.4
# First external interface's gateway
NET_EXT_GW1=192.168.1.1
# Second external interface
NET_EXT_INT2=eth2
# Second external IP
NET_EXT_IP2=192.168.0.103
# Second external interface's gateway
NET_EXT_GW2=192.168.0.1

echo "Flushing All Tables"
$IPTABLES -F
$IPTABLES -F -t nat
$IPTABLES -F -t mangle
$IPTABLES -X -t nat
$IPTABLES -X -t mangle
$IPTABLES -X

$IPTABLES -t mangle -N ETH1
$IPTABLES -t mangle -F ETH1
$IPTABLES -t mangle -A ETH1 -p tcp -j LOG --log-prefix " MANGLE_TCP_ETH1 "
$IPTABLES -t mangle -A ETH1 -p icmp -j LOG --log-prefix " MANGLE_ICMP_ETH1 "
$IPTABLES -t mangle -A ETH1 -j MARK --set-mark 1

$IPTABLES -t mangle -N ETH2
$IPTABLES -t mangle -F ETH2
$IPTABLES -t mangle -A ETH2 -p tcp -j LOG --log-prefix " MANGLE_TCP_ETH2 "
$IPTABLES -t mangle -A ETH2 -p icmp -j LOG --log-prefix " MANGLE_ICMP_ETH2 "
$IPTABLES -t mangle -A ETH2 -j MARK --set-mark 2

$IPTABLES -t nat -N SPOOF_ETH1
$IPTABLES -t nat -F SPOOF_ETH1
$IPTABLES -t nat -A SPOOF_ETH1 -j LOG --log-prefix " SPOOF_ETH1 "
$IPTABLES -t nat -A SPOOF_ETH1 -j SNAT --to ${NET_EXT_IP1}

$IPTABLES -t nat -N SPOOF_ETH2
$IPTABLES -t nat -F SPOOF_ETH2
$IPTABLES -t nat -A SPOOF_ETH2 -j LOG --log-prefix " SPOOF_ETH2 "
$IPTABLES -t nat -A SPOOF_ETH2 -j SNAT --to ${NET_EXT_IP2}

echo "Setting some local network rules..."
$IPTABLES -A INPUT -p icmp -s ${NET_INT_NET}/${NET_INT_SUB} -d ${NET_INT_IP} -j ACCEPT

echo "Setting Mangle rules for $NET_EXT_INT1..."
$IPTABLES -t mangle -A OUTPUT -o ! ${NET_INT_INT} -m random --average 50 -j ETH1
$IPTABLES -t mangle -A PREROUTING -i ${NET_INT_INT} -m random --average 50 -j ETH1
ip ro add table 10 default via ${NET_EXT_GW1} dev ${NET_EXT_INT1}
ip ru add fwmark 1 table 10
ip ro fl ca

echo "Setting Mangle rules for $NET_EXT_INT2..."
$IPTABLES -t mangle -A OUTPUT -o ! ${NET_INT_INT} -m random --average 50 -j ETH2
$IPTABLES -t mangle -A PREROUTING -i ${NET_INT_INT} -m random --average 50 -j ETH2
ip ro add table 20 default via ${NET_EXT_GW2} dev ${NET_EXT_INT2}
ip ru add fwmark 2 table 20
ip ro fl ca

echo "Setting up spoofing rules..."
$IPTABLES -t nat -A POSTROUTING -o ${NET_EXT_INT1} -j SPOOF_ETH1
$IPTABLES -t nat -A POSTROUTING -o ${NET_EXT_INT2} -j SPOOF_ETH2

echo "Adding default route..."
ip ro add default nexthop via ${NET_EXT_GW1} dev ${NET_EXT_INT1} weight 1 nexthop via ${NET_EXT_GW2} dev ${NET_EXT_INT2} weight 1

echo "Disabling Reverse Path Filtering..."
echo 0> /proc/sys/net/ipv4/conf/$NET_EXT_INT1/rp_filter
echo 0> /proc/sys/net/ipv4/conf/$NET_EXT_INT2/rp_filter

echo "Enabling IPv4 Packet forwarding..."
echo "1"> /proc/sys/net/ipv4/ip_forward

Попробуй следующее

Я тоже не спец в iptables/iproute2, но попробуй следующее:

iptables -t mangle -N NEW_OUT_CONN

iptables -t mangle -A OUTPUT -o eth2 -m state --state NEW -j NEW_OUT_CONN

iptables -t mangle -A PREROUTING -o eth2 -m state --state NEW -j NEW_OUT_CONN

iptables -t nat -A POSTROUTING -o eth2 -s 192.168.10.0/24 -m state --state NEW,RELATED -j MASQUERADE 

iptables -t mangle -A OUTPUT -m connmark --mark 2 -j ROUTE --gw 192.168.1.1 --continue
iptables -t mangle -A PREROUTING -m connmark --mark 2 -j ROUTE --gw 192.168.1.1 --continue

iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 0
iptables -t mangle -A NEW_OUT_CONN -m random --average 50 -j RETURN
iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 2

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

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