假设:
你的公网IP是 xxx.xxx.xxx.n1-n2 (一共30个连续的IP)
外网卡是eth0
150个内网用户的IP是192.168.0.1-192.168.0.150
for((i=n1;i<=n2;i++))
do
ip addr add xxx.xxx.xxx.${i} dev eth0
done
#第一个循环,添加IP(需要iproute2这个软件包),如果已经使用其他的方式,比如系统的网卡配置工具设置过那30个IP,就可以不要这个循环了
iptables -t nat -F POSTEROUTING #清空原来POSTROUTING链中的所有规则,(这个需要视情况而定)
for((i=1;i<=150;i++))
do
((j=(i-1)/5+n1))
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.${i} -j SNAT --to xxx.xxx.xxx.${j}
done
#第二个循环,按照顺序,每5个IP,映射到一个外网IP上
(( )) 这是一个计算标志,表示内部是进行算术运算
j=(i-1)/5+n1 (i-1)/5 能够保证每5个IP获取到不同的j值,bash中的计算是取整的, +n1 就是映射到实际的那个IP上(原来的程序部分有错误,在此修正)
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to xxx.xxx.xxx.${j} 此处${j} 会使用j实际的值进行替换,然后再执行iptables命令
复制代码
不知是否可行?
修改原因:添加说明和修正部分错误
[ 本帖最后由 springwind426 于 2007-10-19 09:03 编辑 ]