单网卡网关脚本
时间:2006-05-13 来源:xiaosuo
此脚本针对于只有一个网卡,还需将此台Linux主机作为网关,代理其它处于同一个网段内的主机上网,效率应该没有双网卡高,但是作为应急还是不错的。
应有此脚本的条件是你的Linux主机需要打开NAT支持,并且安装有iptables用户空间软件。接下来你只要把你需要代理的机器的IP加入到/etc/iplist.conf就行了,一行一个ip地址。
然后运行上面的脚本:
享受上网吧,就这么简单。
后记:
本来是一个朋友让我给他配这个网络,弄了老半天也没好,后来发现回应的包做完SNAT的反向工作之后没能通过FORWARD链,因为源IP地址不符啊。所以,做事一定要认真啊!
#!/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 |
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地址不符啊。所以,做事一定要认真啊!
相关阅读 更多 +