LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 671|回复: 3

iptables负载平衡的问题

[复制链接]
发表于 2005-6-6 17:07:32 | 显示全部楼层 |阅读模式
我有4个固定ip,绑定在一块网卡上了,希望在共享上网时,让客户端,任意使用一个ip出去,(实现了)
同时,希望发布sql服务时,能从所有的这4个ip进来(不能使用ip_range?)
我的脚本如下:
#!/bin/bash
echo "Starting Iptables Rules..."
echo "1" > /proc/sys/net/ipv4/ip_forward
inet_iface="eth1"
inet_ip="218.107.130.52"
lan_iface="eth0"
lan_ip="192.168.35.1"
lan_ip_range="192.18.35.0/24"
inet_ip_range="218.107.130.49-218.107.130.53"
ipt="/sbin/iptables"

http_server="192.168.35.7"
http="80"
sql_server="192.168.35.201"
sql="1433"
ftp_server="192.168.35.7"
ftp="21"
mail_server="192.168.35.7"
pop3="110"
smtp="25"

/sbin/depmod -a
/sbin/modprobe ip_tables
/sbin/modprobe iptable_nat
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ipt_LOG


$ipt -P INPUT ACCEPT
$ipt -P FORWARD ACCEPT
$ipt -P OUTPUT ACCEPT
$ipt -t nat -P PREROUTING ACCEPT
$ipt -t nat -P POSTROUTING ACCEPT
$ipt -t nat -P OUTPUT ACCEPT

for TABLE in filter nat mangle ; do
$ipt -t $TABLE -F
$ipt -t $TABLE -X
done

$ipt -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
for DNS in $(grep ^n /etc/resolv.conf|awk '{print $2}') ; do
$ipt -A INPUT -p udp -s $DNS --sport domain -j ACCEPT
done

#$ipt -N LOGDENY
#$ipt -A LOGDENY -j LOG --log-prefix "iptables:"
#$ipt -A LOGDENY -j DROP
#$ipt -A INPUT -i ! lo -m state --state NEW,INVALID -j LOGDENY

$ipt -t nat -A POSTROUTING -o $inet_iface -j SNAT --to $inet_ip_range

$ipt -t nat -A PREROUTING -i $lan_iface -p tcp --dport 80 -j REDIRECT --to-ports 3128

$ipt -t nat -A PREROUTING --dst $inet_ip -p tcp --dport $http -j DNAT --to-destination $http_server
$ipt -t nat -A POSTROUTING -p tcp --dst $http_server --dport $http -j SNAT --to-source $lan_ip
$ipt -t nat -A OUTPUT --dst $inet_ip -p tcp --dport $http -j DNAT --to-destination $http_server

$ipt -t nat -A PREROUTING --dst $inet_ip_range -p tcp --dport $sql -j DNAT --to-destination $sql_server
$ipt -t nat -A POSTROUTING -p tcp --dst $sql_server --dport $sql -j SNAT --to-source $lan_ip

$ipt -t nat -A PREROUTING --dst $inet_ip -p tcp --dport $ftp -j DNAT --to-destination $ftp_server
$ipt -t nat -A POSTROUTING -p tcp --dst $ftp_server --dport $ftp -j SNAT --to-source $lan_ip
$ipt -t nat -A OUTPUT --dst $inet_ip -p tcp --dport $ftp -j DNAT --to-destination $ftp_server

$ipt -t nat -A PREROUTING --dst $inet_ip51 -p tcp --dport $pop3 -j DNAT --to-destination $mail_server
$ipt -t nat -A POSTROUTING -p tcp --dst $mail_server --dport $pop3 -j SNAT --to-source $lan_ip
$ipt -t nat -A OUTPUT --dst $inet_ip -p tcp --dport $pop3 -j DNAT --to-destination $mail_server

$ipt -t nat -A PREROUTING --dst $inet_ip51 -p tcp --dport $smtp -j DNAT --to-destination $mail_server
$ipt -t nat -A POSTROUTING -p tcp --dst $mail_server --dport $smtp -j SNAT --to-source $lan_ip
$ipt -t nat -A OUTPUT --dst $inet_ip51 -p tcp --dport $smtp -j DNAT --to-destination $mail_server


echo "done"
 楼主| 发表于 2005-6-6 17:09:30 | 显示全部楼层
带动局域网上网的$ipt -t nat -A POSTROUTING -o $inet_iface -j SNAT --to $inet_ip_range语句能顺利执行
可是执行到发布sql的语句$ipt -t nat -A PREROUTING --dst $inet_ip_range -p tcp --dport $sql -j DNAT --to-destination $sql_server时
提示:
host/network “218.107.130.49-218.107.130.53” not found
try iptables -h for more information

请问该如何解决?难道只能针对每个ip建立一条规则吗?
回复 支持 反对

使用道具 举报

发表于 2005-6-6 19:00:37 | 显示全部楼层
格式错了应该是--destination address/mask
你这样ip-ip的格式可以看看iprange模块,没用过,
man iptables
搜索iprange字符串
回复 支持 反对

使用道具 举报

发表于 2005-6-6 22:04:29 | 显示全部楼层
inet_ip_range="218.107.130.49-218.107.130.53"这个有问题。用address[/mask]
的写法。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表