Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2039813
  • 博文数量: 369
  • 博客积分: 10093
  • 博客等级: 上将
  • 技术积分: 4271
  • 用 户 组: 普通用户
  • 注册时间: 2005-03-21 00:59
文章分类

全部博文(369)

文章存档

2013年(1)

2011年(2)

2010年(10)

2009年(16)

2008年(33)

2007年(146)

2006年(160)

2005年(1)

分类: LINUX

2006-05-13 23:38:04

此脚本针对于只有一个网卡,还需将此台Linux主机作为网关,代理其它处于同一个网段内的主机上网,效率应该没有双网卡高,但是作为应急还是不错的。
#!/bin/bash

IPTABLES=/sbin/iptables
IFCONFIG=/sbin/ifconfig
MODPROBE=/sbin/modprobe

if [ $# -lt 1 ]; then
        echo Usage $0 GatewayIP
        exit
fi
GATEWAYIP=$1

echo -n Setup network card ...
public_ip=`ifconfig eth0 | sed -n 's/\([ \t]*\)inet addr:\([^ \t]*\)\(.*\)/\2/p'`
$IFCONFIG eth0:1 $GATEWAYIP netmask 255.255.255.0
[ $? -eq 0 ] || exit
echo OK

echo Load necessary modules
MODULEPATH=/lib/modules/`uname -r`/kernel/net/ipv4/netfilter
KERNELMAJOR=`uname -r`
KERNELMAJOR=${KERNELMAJOR%%-*}
left=${KERNELMAJOR#*.}
left=${left#*.}
left=".$left"
KERNELMAJOR=${KERNELMAJOR%$left}
if [ -d $MODULEPATH ]; then
        for i in $MODULEPATH/ip_nat_*; do
                if [ "X$KERNELMAJOR" = "X2.6" ]; then
                        i=${i%.ko}
                else
                        i=${i%.o}
                fi
                i=${i##*/}
                echo -n Load module $i ...
                $MODPROBE $i
                [ $? -eq 0 ] || exit
                echo OK
        done
fi

echo -n Allow forwarding ...
echo 1 > /proc/sys/net/ipv4/ip_forward
[ $? -eq 0 ] || exit
echo OK

echo -n Set default rules ...
$IPTABLES -P FORWARD DROP &&
$IPTABLES -F FORWARD &&
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT &&
$IPTABLES -t nat -F POSTROUTING
[ $? -eq 0 ] || exit
echo OK

while read ip ; do
        echo -n Allow $ip ...
        $IPTABLES -A FORWARD -s $ip/32 -j ACCEPT &&
        $IPTABLES -t nat -A POSTROUTING -s $ip/32 -j SNAT --to-source  $public_ip
        [ $? -eq 0 ] || exit
        echo OK
done < /etc/iplist.conf
应有此脚本的条件是你的Linux主机需要打开NAT支持,并且安装有iptables用户空间软件。接下来你只要把你需要代理的机器的IP加入到/etc/iplist.conf就行了,一行一个ip地址。
192.168.0.2
192.168.0.3
192.168.0.4
192.168.0.5
192.168.0.6
然后运行上面的脚本:
gateway.sh 192.168.0.1
享受上网吧,就这么简单。
后记:
本来是一个朋友让我给他配这个网络,弄了老半天也没好,后来发现回应的包做完SNAT的反向工作之后没能通过FORWARD链,因为源IP地址不符啊。所以,做事一定要认真啊!
阅读(900) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~