Вот скрипты
Код: Выделить всё
#!/bin/bash
# LAN interface
IF0="eth1"
# WAN interface 1
IF1="eth0"
# WAN interface 2
IF2="eth2"
LO_IFACE="lo"
LO_IP="127.0.0.1"
LAN_IP="172.16.0.92"
MAIL_IP="172.16.0.3"
WEB_IP="172.16.0.3"
MAIL_IP2="172.16.0.4" (allias на почтовом сервере )
WEB_IP2="172.16.0.4"
RDP_IP="172.16.0.22"
RDP_IP2="172.16.0.23" (allias на RDP сервере )
IP1="217.*.*.*"
IP2="87.*.*.*"
# gateway 1
P1="217.*.*.*"
# gateway 2
P2="87.*.*.*"
# LAN netmask
P0_NET="172.16.0.0/24"
# WAN1 netmask
P1_NET="255.255.255.248"
# WAN2 netmask
P2_NET="255.255.255.128"
TBL1="provider1"
TBL2="provider2"
# Realtive weight of channels bandwidth
W1="2"
W2="1"
IPTABLES="iptables"Код: Выделить всё
#!/bin/bash
. /etc/sysconfig/balans/vars
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp
ip route flush table $TBL1
ip route flush table $TBL2
ip route add $P1_NET dev $IF1 src $IP1 table $TBL1 > /dev/null 2>&1
ip route add default via $P1 table $TBL1 > /dev/null 2>&1
ip route add $P2_NET dev $IF2 src $IP2 table $TBL2 > /dev/null 2>&1
ip route add default via $P2 table $TBL2 > /dev/null 2>&1
ip route add $P1_NET dev $IF1 src $IP1 > /dev/null 2>&1
ip route add $P2_NET dev $IF2 src $IP2
ip route add default via $P1 > /dev/null 2>&1
ip rule add from $IP1 table $TBL1 > /dev/null 2>&1
ip rule add from $IP2 table $TBL2 > /dev/null 2>&1
ip rule add fwmark 0x5 table $TBL1
ip rule add fwmark 0x6 table $TBL2
ip route add $P0_NET dev $IF0 table $TBL1 > /dev/null 2>&1
ip route add $P2_NET dev $IF2 table $TBL1 > /dev/null 2>&1
ip route add 127.0.0.0/8 dev lo table $TBL1 > /dev/null 2>&1
ip route add $P0_NET dev $IF0 table $TBL2 > /dev/null 2>&1
ip route add $P1_NET dev $IF1 table $TBL2 > /dev/null 2>&1
ip route add 127.0.0.0/8 dev lo table $TBL2 > /dev/null 2>&1
ip route flush cache
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -t mangle -N NEW_OUT_CONN
$IPTABLES -N bad_tcp_packets
$IPTABLES -N allowed
$IPTABLES -N tcp_packets
$IPTABLES -N udp_packets
$IPTABLES -N icmp_packets
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP
$IPTABLES -A allowed -p TCP --syn -j ACCEPT
$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A allowed -p TCP -j DROP
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 20 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 21 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 22 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 25 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 110 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 80 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 113 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 143 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 3389 -j allowed
$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 53 -j ACCEPT
$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 3389 -j ACCEPT
$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 123 -j ACCEPT
$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 2074 -j ACCEPT
$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 4000 -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $IF0 -s $P0_NET -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LO_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LAN_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $IP1 -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $IP2 -j ACCEPT
$IPTABLES -A INPUT -p ALL -d $IP1 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p ALL -d $IP2 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p TCP -i $IF1 -j tcp_packets
$IPTABLES -A INPUT -p UDP -i $IF1 -j udp_packets
$IPTABLES -A INPUT -p TCP -i $IF2 -j tcp_packets
$IPTABLES -A INPUT -p UDP -i $IF2 -j udp_packets
#$IPTABLES -A INPUT -p ICMP -i $IF1 -j icmp_packets
$IPTABLES -A INPUT -i $IF1 -d 224.0.0.0/8 -j DROP
$IPTABLES -A INPUT -i $IF2 -d 224.0.0.0/8 -j DROP
$IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT INPUT packet died: "
$IPTABLES -A FORWARD -p tcp -j bad_tcp_packets
$IPTABLES -A FORWARD -i $IF0 -j ACCEPT
$IPTABLES -A FORWARD -p TCP --dport 3389 -j ACCEPT
$IPTABLES -A FORWARD -p TCP --dport 5060 -j ACCEPT
$IPTABLES -A FORWARD -p UDP --dport 5060 -j ACCEPT
$IPTABLES -A FORWARD -p UDP --dport 5061 -j ACCEPT
$IPTABLES -A FORWARD -p TCP --dport 20 -j ACCEPT
$IPTABLES -A FORWARD -p TCP --dport 21 -j ACCEPT
$IPTABLES -A FORWARD -p TCP --dport 25 -j ACCEPT
$IPTABLES -A FORWARD -p TCP --dport 23 -j ACCEPT
$IPTABLES -A FORWARD -p TCP --dport 80 -j ACCEPT
$IPTABLES -A FORWARD -p TCP --dport 110 -j ACCEPT
$IPTABLES -A FORWARD -p TCP --dport 143 -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT FORWARD packet died: "
$IPTABLES -A OUTPUT -p tcp -j bad_tcp_packets
$IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $IP1 -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $IP2 -j ACCEPT
$IPTABLES -t mangle -A PREROUTING -i $IF1 -p tcp --dport 3389 -j MARK --set-mark 5
$IPTABLES -t mangle -A PREROUTING -i $IF2 -p tcp --dport 3389 -j MARK --set-mark 6
$IPTABLES -t mangle -A PREROUTING -i $IF1 -p tcp --dport 25 -j MARK --set-mark 5
$IPTABLES -t mangle -A PREROUTING -i $IF2 -p tcp --dport 25 -j MARK --set-mark 6
$IPTABLES -t mangle -A PREROUTING -i $IF1 -p tcp --dport 80 -j MARK --set-mark 5
$IPTABLES -t mangle -A PREROUTING -i $IF2 -p tcp --dport 80 -j MARK --set-mark 6
$IPTABLES -t mangle -A PREROUTING -i $IF1 -p tcp --dport 110 -j MARK --set-mark 5
$IPTABLES -t mangle -A PREROUTING -i $IF2 -p tcp --dport 110 -j MARK --set-mark 6
$IPTABLES -t mangle -A PREROUTING -i $IF1 -p tcp --dport 143 -j MARK --set-mark 5
$IPTABLES -t mangle -A PREROUTING -i $IF2 -p tcp --dport 143 -j MARK --set-mark 6
$IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT OUTPUT packet died: "
$IPTABLES -t nat -A POSTROUTING -p tcp -m iprange --src-range 172.16.0.1-172.16.0.99 -o $IF1 -j SNAT --to-source $IP1
$IPTABLES -t nat -A POSTROUTING -p udp -m iprange --src-range 172.16.0.1-172.16.0.99 -o $IF1 -j SNAT --to-source $IP1
$IPTABLES -t nat -A POSTROUTING -p tcp -m iprange --src-range 172.16.0.1-172.16.0.99 -o $IF2 -j SNAT --to-source $IP2
$IPTABLES -t nat -A POSTROUTING -p udp -m iprange --src-range 172.16.0.1-172.16.0.99 -o $IF2 -j SNAT --to-source $IP2
$IPTABLES -t nat -A POSTROUTING -p tcp -m iprange --src-range 172.16.0.200-172.16.0.255 -o $IF1 -j SNAT --to-source $IP1
$IPTABLES -t nat -A POSTROUTING -p udp -m iprange --src-range 172.16.0.200-172.16.0.255 -o $IF1 -j SNAT --to-source $IP1
$IPTABLES -t nat -A POSTROUTING -p tcp -m iprange --src-range 172.16.0.200-172.16.0.255 -o $IF2 -j SNAT --to-source $IP2
$IPTABLES -t nat -A POSTROUTING -p udp -m iprange --src-range 172.16.0.200-172.16.0.255 -o $IF2 -j SNAT --to-source $IP2
$IPTABLES -t nat -A POSTROUTING -s 172.16.0.0/24 -o $IF0 -p tcp -m tcp --dport 3389 -j SNAT --to-source $IP1
$IPTABLES -t nat -A POSTROUTING -s 172.16.0.0/24 -o $IF0 -p tcp -m tcp --dport 3389 -j SNAT --to-source $IP2
$IPTABLES -t nat -A POSTROUTING -p tcp -s $P0_NET --dst $MAIL_IP --dport 25 -j SNAT --to-source $LAN_IP
$IPTABLES -t nat -A POSTROUTING -p tcp -s $P0_NET --dst $MAIL_IP --dport 110 -j SNAT --to-source $LAN_IP
$IPTABLES -t nat -A POSTROUTING -p tcp -s $P0_NET --dst $MAIL_IP --dport 143 -j SNAT --to-source $LAN_IP
$IPTABLES -t nat -A POSTROUTING -p tcp -s $P0_NET --dst $WEB_IP --dport 80 -j SNAT --to-source $LAN_IP
$IPTABLES -t nat -A PREROUTING -p TCP -m tcp -d $IP1 --dport 3389 -j DNAT --to-destination $RDP_IP
$IPTABLES -t nat -A PREROUTING -p TCP -m tcp -d $IP2 --dport 3389 -j DNAT --to-destination $RDP_IP2
$IPTABLES -t mangle -A PREROUTING -i $IF0 -s $RDP_IP -p tcp --sport 3389 -j MARK --set-mark 5
$IPTABLES -t mangle -A PREROUTING -i $IF0 -s $RDP_IP2 -p tcp --sport 3389 -j MARK --set-mark 6
$IPTABLES -t nat -A PREROUTING -p TCP -m tcp -d $LAN_IP --dport 25 -j DNAT --to-destination $MAIL_IP
$IPTABLES -t nat -A PREROUTING -p TCP -m tcp -d $LAN_IP --dport 110 -j DNAT --to-destination $MAIL_IP
$IPTABLES -t nat -A PREROUTING -p TCP -m tcp -d $LAN_IP --dport 143 -j DNAT --to-destination $MAIL_IP
$IPTABLES -t nat -A PREROUTING -p TCP -m tcp -d $IP1 --dport 25 -j DNAT --to-destination $MAIL_IP
$IPTABLES -t nat -A PREROUTING -p TCP -m tcp -d $IP1 --dport 110 -j DNAT --to-destination $MAIL_IP
$IPTABLES -t nat -A PREROUTING -p TCP -m tcp -d $IP1 --dport 143 -j DNAT --to-destination $MAIL_IP
$IPTABLES -t nat -A PREROUTING -p TCP -m tcp -d $IP2 --dport 25 -j DNAT --to-destination $MAIL_IP2
$IPTABLES -t nat -A PREROUTING -p TCP -m tcp -d $IP2 --dport 110 -j DNAT --to-destination $MAIL_IP2
$IPTABLES -t nat -A PREROUTING -p TCP -m tcp -d $IP2 --dport 143 -j DNAT --to-destination $MAIL_IP2
$IPTABLES -t mangle -A PREROUTING -i $IF0 -s $MAIL_IP -p tcp --sport 25 -j MARK --set-mark 5
$IPTABLES -t mangle -A PREROUTING -i $IF0 -s $MAIL_IP -p tcp --sport 110 -j MARK --set-mark 5
$IPTABLES -t mangle -A PREROUTING -i $IF0 -s $MAIL_IP -p tcp --sport 143 -j MARK --set-mark 5
$IPTABLES -t mangle -A PREROUTING -i $IF0 -s $MAIL_IP2 -p tcp --sport 25 -j MARK --set-mark 6
$IPTABLES -t mangle -A PREROUTING -i $IF0 -s $MAIL_IP2 -p tcp --sport 110 -j MARK --set-mark 6
$IPTABLES -t mangle -A PREROUTING -i $IF0 -s $MAIL_IP2 -p tcp --sport 143 -j MARK --set-mark 6
$IPTABLES -t nat -A PREROUTING -p TCP -m tcp -d $LAN_IP --dport 80 -j DNAT --to-destination $WEB_IP
$IPTABLES -t nat -A PREROUTING -p TCP -m tcp -d $IP1 --dport 80 -j DNAT --to-destination $WEB_IP
$IPTABLES -t nat -A PREROUTING -p TCP -m tcp -d $IP2 --dport 80 -j DNAT --to-destination $WEB_IP2
$IPTABLES -t mangle -A PREROUTING -i $IF0 -s $WEB_IP -p tcp --sport 80 -j MARK --set-mark 5
$IPTABLES -t mangle -A PREROUTING -i $IF0 -s $WEB_IP2 -p tcp --sport 80 -j MARK --set-mark 6и скрипт проверки каналов
Код: Выделить всё
#!/bin/bash
. /etc/sysconfig/balans/vars
OLDIF1=0
OLDIF2=0
. /etc/sysconfig/balans/routing.sh
while true; do
ping -c 3 -s 100 $P1 -I $IF1 > /dev/null
if [ $? -ne 0 ]; then
echo "Failed IF1!"
NEWIF1=0
else
NEWIF1=1
fi
ping -c 3 -s 100 $P2 -I $IF2 > /dev/null
if [ $? -ne 0 ]; then
echo "Failed IF2!"
NEWIF2=0
else
NEWIF2=1
fi
if (( ($NEWIF1!=$OLDIF1) || ($NEWIF2!=$OLDIF2) )); then
echo "Changing routes"
if (( ($NEWIF1==1) && ($NEWIF2==1) )); then
echo "Both channels"
ip route delete default
ip route add default scope global nexthop via $P1 dev $IF1 weight $W1 \
nexthop via $P2 dev $IF2 weight $W2
elif (( ($NEWIF1==1) && ($NEWIF2==0) )); then
echo "First channel"
ip route delete default
ip route add default via $P1 dev $IF1
elif (( ($NEWIF1==0) && ($NEWIF2==1) )); then
echo "Second channel"
ip route delete default
ip route add default via $P2 dev $IF2
fi
else
echo "Not changed"
fi
OLDIF1=$NEWIF1
OLDIF2=$NEWIF2
sleep 3
doneВот уже готовый вариант , рабочий .