当前位置:Linux教程 - Linux - 校园网解决方案

校园网解决方案

现在正值校园网改造, 许多教研组都接入了校园网, 但有个常见的问题是IP地址不够,
这时用Linux的IP-Masquerade技术很不错. 可以实现子网内没有合法IP的机器透明
访问Internet(FTP/HTTP/Email等). 许多地方已经在用Linux做IP-Masq了, 我写这篇
文章主要是向一些还不太熟悉的同志介绍一下. 装好了Linux, 可以当router, DNS/FTP
/HTTP/Email/telnet/xdm... Server, 而对机器配置的要求很低, 还算是个""性价比""
高的解决方案吧 :-)

一般来说进入屋内的就是Hub/Switch上出来的一根网线, 接入方法大致有两种:
(1) 网线接router机器的网卡上,采用路由方法将局域网连入校园网, 这样屋内的局域
网与外面是隔离的
(2) 网线接Hub上, 采用Hub级连方式连入校园网, 这样屋内的局域网并入外面的子网

1. 通过Linux Router连入校园网

装一台有两块网卡的机器(486/586都行), 装Linux做router, 跑IP-Masquerade.
这种接入方法有firewall的功能, 外面的机器无法直接访问屋内子网. 推荐使用
RedHat Linux(下面的示范用RedHat), 安装配置简单, 易学易用. 关于Linux的
获取,安装请参见Linux版相关文章. 装好后进行以下配置:

首先当然要Linux Kernel能找到两块网卡了, 一般在/etc/lilo.conf中加上这么一句
append=""ether=irq,io,eth1"" 就可以找到第二块网卡了(irq,io填网卡的IRQ,IO,
若填0,0可以自动测试). 另外好多PCI的网卡kernel都能自动测到, 无需加内核参数.
然后运行lilo更新一下LILO就可以重起试验了.

接下来就是配IP地址和网关等东西:
/etc/sysconfig/network 下面是设gateway的地方,
NETWORKING=yes
FORWARD_IPV4=yes
HOSTNAME=host.your.domain.name
DOMAINNAME=your.domain.name
GATEWAYDEV=eth0
GATEWAY=166.111.68.1(for example)
GATEWAYDEV是指可以上 Internet那块网卡, GATEWAY是指你们的网关

/etc/sysconfig/network-scripts/
下面有针对每块网卡的配置文件
ifcfg-lo, ifcfg-eh0, ifcfg-eth1
里面可以设你的IP地址, 广播地址, 网络号等, 设对了之后系统boot时就会自动建立正确
的静态路由表. 一般一块网卡接外面校园网, 有合法的IP地址, 另一块网卡接内部的
Intranet, 使用192.168等内部IP地址. 举个例子, 对外的eth0网卡地址为166.111.68.x,
对内设为192.168.1.1(eth1), 并给子网内的机器分配192.168.x.x的伪IP地址, 将它们的
gateway设为192.168.1.1就行了

然后就是要建立IP-Masquerade了, 这几句可以加在/etc/rc.d/rc.local的最后

echo ""Starting IP-Masquerade service: ipfwadm""
ipfwadm -F -p deny 缺省不进行IP包的forward
ipfwadm -F -a m -S 192.168.0.0/16 -D 0.0.0.0/0
对192.168子网进行NAT(Network Address Translation)
insmod ip_masq_ftp 加入ftp模块, 使子网能够透明访问外面的ftp

这样就行了, Linux对192.168.0.0子网上的IP包会自动进行IP地址转换操作, 具体说就
是在192.168.x.x往外发IP包时Linux kernel自动将source IP替换为Linux的valid IP,
并选一个新的source port, 这个source port就对应了原来的机器, kernel会造一个
masquerade表. 而等到对方的机器回应后Linux机器根据返回IP包的port查masquerade
表找出源机器, 然后将该包送回给子网内的机器, 这样就实现了子网内的假IP地址对外
面Internet的透明访问. 现在Linux的IP-Masquerade已经实现了TCP,UDP和ICMP的
masquerade.

这样做的缺陷是所有连接应该由子网内首先发起, 因为由外面的机器发起的连接无法访
问子网内的机器. 因此在一些服务上可能有问题, 如ftp, 而这就要通过相应的module
来实现,insmod ip_masq_ftp加入ftp module模块后就可以实现ftp访问了, 这是通过检
测IP包来自动替换相应协议的某些地址来实现的. 类似的module还有ip_masq_irc.o,
ip_masq_raudio.o等, 都是针对相应协议的.

这种方式比用proxy的好处在于它是""透明""地访问外面的Internet, 无需对子网内机器
进行什么特别设置(就是设一下gateway/DNS就行了), 可以省出Netscape/IE等的proxy
地方. 假如还要进行计费的话, 可以去找Linux下进行IP流量统计的包, 装上就行了

2. 通过Hub级连接入Internet

这种方法是指将switch/hub的引出的网线直接接入到自己局域网的Hub上, 这样自己的
子网就相当于并入外面的大子网内了. 这样接的好处是大家同处同一子网内, Windows
的网上邻居能够看见, 但是这样就无法实现firewall的功能了.

一般难以做到屋内每台机器都申请了合法的IP地址, 这样有valid IP的机器可以出
router, 而没有valid IP的机器只能在subnet内游弋, 无法出router(router处设了
static MAC-IP表), 或者先telnet到valid IP机器上再出去. 我看到好些屋是这么
接的, 感觉不太方便, 其实这样也是可以设IP-Masquerade的. 装一台有合法IP的
Linux机器(只要一块网卡)就行了.

具体的做法与第一种类似, 就是在设谁能使用IP-Masq服务时要格外小心, 不然就有可
能被别人盗用了, 最好也采用static MAC-IP对应技术, 使Masq服务只限于自己屋的几
台特定机器.也可以采用alias的方法, 使Linux机器bind两个IP(一个对外一个对内),
这样逻辑上会清楚一些

3. Linux做网桥

比如说你有两个子网, 想用网桥把它们连起来, Linux就可以用来做软件网桥.
首先就是要编译一个支持网桥的内核, 然后download一个叫brcfg的utility, 运行

brcfg -enable 打开网桥
ifconfig eth0 promisc
ifconfig eth1 promisc 使两块网卡都进入promisc模式
(这些也可以写进/etc/rc.d/rc.local中)

好了, 你的两个子网已经连成一个逻辑上的大子网了, 你可以把netmask改大些,
包括两个子网就行了. 这比用router连的好处在于它们是在同一个子网内, 因此网络
邻居什么的都能看见, 要不然就得用wins之类的东西了

假如你用了前面第一种接入方法而又想能够看见校园网上的机器, 也可以使用网桥,
把两块网卡都置成promisc模式并brcfg -enable就好了

4. Linux上架proxy

Linux上的proxy主要有SOCKS5, squid, fwtk2(TIS Firewall Toolkit), apache等
它们的功能各异, 架设方法也不大一样, 我不想在这里写了. 华南木棉站Unix斑竹
ali曾经写乐好多架proxy的文章, 大家可去看他的精华区
Linux还有许多有用的网络功能, 大家边用边体会了