10/05/2006

多机单网卡共享上网--linux技巧

问题背景
学校采用透明代理上网方法。每个户头每月15元,流量限为20G。以前是8人用一个路由器上网,后来不知什么缘故,采用路由器共享上网方式变得非常不稳定(怀疑学校做了什么手脚?)。于是只好寻找其它途径。学校还有另外一种上网方式,即网通的100元包月上网卡,为了获得最大的利益,网通通过技术手段限制,使得不能用路由器共享上网。以前听说能够使用双网卡,实现多机上网,但实践多次,均失败了。

解决方案
利用linux内核的数据转发,及一块网卡绑定多个IP,NAT地址转换等特性实现。

网络架构
两个寝室共8台电脑,网络架构如下图所示。
交换器2其实是原来的路由器,只是WAN口空着,把外网与其它客户机一起接到LAN口上。
图中结构只是本寝室的实际情况,不表示一定要求这样。

服务端设置
首先,确保内核打开ip转发功能。
cat /proc/sys/net/ipv4/ip_forward
结果为1,则表示已经打开。为0则编辑/etc/sysctl.conf文件,将其中的net/ipv4/ip_forward=1前的#号删去。重启使改动生效。也可以直接用类似
echo "1" > /proc/sys/net/ipv4/ip_forward
的语句来使改动立即生效。
添加内网IP
ifconfig eth0:1 192.168.0.1 broadcast 192.168.0.255 netmask 255.255.255.0
添加转发列表
iptables -F

iptables -F -t nat
此两步刷新缓存,大部分情况下可省略。

iptables -P FORWARD DROP

iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT

iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to <外网IP>

<外网IP>请作适当替换。
添加完后用iptables -L应该可以看到添加的一些条目。到此服务端设置完成。

客户端设置
IP:192.168.0.xxx
网关:192.168.0.1(上面设的内网IP)
DNS与服务端相同。

实际效果
客户端上QQ,PPLIVE,IE,以及firefox等工作正常。基本上可以说,采用TCP,UDP的程序均工作正常。但ICMP不正常(现象是不能ping通)。这时,客户端在外网看来即是服务端。
服务端和成为服务器前相同,无异样。CPU占用率不高。

存在的问题
不知如何控制转发速度。

其它
服务端在ubuntu6.06上调试通过。
指令多需要root权限,请注意。
建议将配置指令写到脚本中。
水平有限,谬误之处还请包涵。

参考资料:
打开转发功能
lsyer兄在红旗linux下的设置

Linux单网卡绑多IP

没有评论: