练习iptables的使用,实现linux下的双网卡共享上网。
环境:
windows xp 作为局域网客户机
redhat linux 作为网关
步骤:
因为我只有一台电脑,又要模拟两块网卡,所以我在xp装了一个virtualPC,装的是linux系统。又到网上找了一个 Linux单网卡双IP的的配置。照着做:
#cd /etc/sysconfig/network-scripts
#cp ifcfg-eth0 ifcfg-eth0:1
并把内容改一下:
DEVICE=”eth0:1″
IPADDR=”192.168.0.1″
BROADCAST=”192.168.0.255″
NETMASK=”255.255.255.0″
ONBOOT=”yes”
重启一下网卡:
/etc/init.d/network restart
[提示] 用ifup eth0:1不起作用,ping不通。请用network restart
配置Linux的NAT和ip_forward: 这里我直接从网上找了一个scripts。非常好用。
java 代码
- #!/bin/sh
- # Name: nat.sh
- # Author: Bixuan
- # Date: 2003/04/04
- echo "Your user the iptables firewall.";
- ETH="eth0" #有外网IP的网卡
- SRC="192.168.0.0/24" # 内网地址段
- case $1 in
- start)
- echo 1 > /proc/sys/net/ipv4/ip_forward
- /sbin/modprobe ip_tables
- /sbin/modprobe iptable_filter
- /sbin/modprobe iptable_nat
- /sbin/modprobe ip_conntrack
- /sbin/modprobe ip_conntrack_ftp
- /sbin/modprobe ip_nat_ftp
- /sbin/iptables -F INPUT
- /sbin/iptables -F FORWARD
- /sbin/iptables -F POSTROUTING -t nat
- /sbin/iptables -P FORWARD DROP
- /sbin/iptables -t nat -A POSTROUTING -o $ETH -s $SRC -j MASQUERADE
- /sbin/iptables -A FORWARD -i $ETH -m state --state ESTABLISHED,RELATED -j ACCEPT
- /sbin/iptables -A FORWARD -s $SRC -j ACCEPT
- echo "Nat is strating ...... [ OK ]"
- ;;
- stop)
- echo 0 > /proc/sys/net/ipv4/ip_forward
- ;;
- *)
- echo $"Usage: $0 {start|stop}";
- esac
把上面的scripts存起来nat.sh执行一下
#chmod u+x nat.sh
#./nat.sh
再配置局域网的机器如下配置:
ip: 192.168.0.x
netmask: 255.255.255.0
gw: 192.168.0.1
dns: 你的dns,我是网通,我配的是202.106.0.20
测试机器连通:
ping 192.168.0.1
ping www.163.com
都正常的话,再打开firefox上网,一切OK. 操练结束。
[提示]:
如果是真实环境,linux有双网卡,那么设置eth0为外网IP,eth1为192.168.0.1的内网IP。如果你本机不一定,修改ETH=为你的外网网卡标识。 一般是eth0,eth1
虽然是成功配置好了,但是我对 MASQUERADE和forward 那一句还是不理解,响应包的source然道是192.168.0.x? 不然网关怎么知道转给谁?
参考:
1. man iptables
2. google search with keyword "iptables共享上网"