IP Alias mini HOWTO 如何在 Linux 机器上设定 IP 别名
原始文件:LinuxIPAliasminiHOWTO
翻译日期:1997/10/23
翻译维护:cwhuang@phys.ntu.edu.tw
----------------------------------------------------------------------------------------------
本文最後修改日期:January13th1997.
如何在Linux机器上设定IP别名(aliasing)
GNUCopyleft1996/1997HarishPillay(h.pillay@ieee.org)
原始站:http://home.pacific.net.sg/~harish/linuxipalias.html
摘要:
本文说明如何在Linux机器上设定并执行IP别名.除此之外,还有如何设定在IP
别名上接收e-mail.
我的设定:
*最新的核心(2.0.27-从ftp://ftp.funet.fi/pub/Linux/kernel/src/v2.0取得)-
从1.3.7x以後就可以.
*将IPAlias编译成可载入模组.你在用"makeconfig"指令编译核心时,如果要
把IPMasq编译成模组(Modules)应会被问到.查看ModulesHOWTO(如果有的话)
或是查看/usr/src/linux/Documentation/modules.txt中的资讯.
*我在已分配给我的IP之外还又要了两个额外的IP.
*一片D-LinkDE620网路卡(不重要,任何Linux支援的网路卡都行).
指令:
*首先载入IPAlias模组(如果你将它编译进核心可跳过此步骤):
/sbin/insmod/lib/modules/`uname-r`/ipv4/ip_alias.o
*再来,建立回绕(loopback)装置,以及eth0界面上以主IP号码为开头的所有IP
号码:
/sbin/ifconfiglo127.0.0.1
/sbin/ifconfigeth0up
/sbin/ifconfigeth0172.16.3.1
/sbin/ifconfigeth0:0172.16.3.10
/sbin/ifconfigeth0:1172.16.3.100
172.16.3.1是主IP号码,而.10及.100是别名.比较奇怪的地方是eth0:x,
其中x=0,1,2,...n在每一不同的IP号码上.主IP号码不需要这个.
*第三步是建立递送路径.首先,递送到回绕装置,然後是区域网路,最後是不同的
IP号码及预设递送路径:
/sbin/routeadd-net127.0.0.0
/sbin/routeadd-net172.16.3.0deveth0
/sbin/routeadd-host172.16.3.1deveth0
/sbin/routeadd-host172.16.3.10deveth0:0
/sbin/routeadd-host172.16.3.100deveth0:1
/sbin/routeadddefaultgw172.16.3.200
就这样了.
在上面的例子中,为了说明我用的是RFC1918所定义的私用IP号码.用你正式或
私有的IP号码来取代它.
上面的例子只展示了三个IP号码.在/usr/include/linux/net_alias.h中定义的
最大值是256.在一片网路卡上256个IP号码已经很多了:-)!
我用/sbin/ifconfig看起来像这样:
loLinkencap:LocalLoopback
inetaddr:127.0.0.1Bcast:127.255.255.255Mask:255.0.0.0
UPBROADCASTLOOPBACKRUNNINGMTU:3584Metric:1
RXpackets:5088errors:0dropped:0overruns:0
TXpackets:5088errors:0dropped:0overruns:0
eth0Linkencap:10MbpsEthernetHWaddr00:8E:B8:83:19:20
inetaddr:172.16.3.1Bcast:172.16.3.255Mask:255.255.255.0
UPBROADCASTRUNNINGPROMISCMULTICASTMTU:1500Metric:1
RXpackets:334036errors:0dropped:0overruns:0
TXpackets:11605errors:0dropped:0overruns:0
Interrupt:7Baseaddress:0x378
eth0:0Linkencap:10MbpsEthernetHWaddr00:8E:B8:83:19:20
inetaddr:172.16.3.10Bcast:172.16.3.255Mask:255.255.255.0
UPBROADCASTRUNNINGMTU:1500Metric:1
RXpackets:0errors:0dropped:0overruns:0
TXpackets:0errors:0dropped:0overruns:0
eth0:1Linkencap:10MbpsEthernetHWaddr00:8E:B8:83:19:20
inetaddr:172.16.3.100Bcast:172.16.3.255Mask:255.255.255.0
UPBROADCASTRUNNINGMTU:1500Metric:1
RXpackets:1errors:0dropped:0overruns:0
TXpackets:0errors:0dropped:0overruns:0
而/proc/net/aliases是
devicefamilyaddress
eth0:02172.16.3.10
eth0:12172.16.3.100
而/proc/net/alias_types是
typenamen_attach
2ip2
当然,/proc/net的内容是由ifconfig指令产生而非用手写的!
问:如何在重新启动机器後保持设定?
答:不论你是用BSD形式或是SysV形式(例如RedHat)的init启动,你都可以把它
放在/etc/rc.d/rc.local中.下面是我在我的SysVinit系统(RedHat3.0.3
及4.0)中的设定:
*我的/etc/rc.d/rc.local:(修改过只显示相关的部份)
#settingupIPaliasinterfaces
echo"Setting172.16.3.1,172.16.3.10,172.16.3.100IPAliases..."
/sbin/ifconfiglo127.0.0.1
/sbin/ifconfigeth0up
/sbin/ifconfigeth0172.16.3.1
/sbin/ifconfigeth0:0172.16.3.10
/sbin/ifconfigeth0:1172.16.3.100
#settinguptheroutes
echo"SettingIProutes..."
/sbin/routeadd-net127.0.0.0
/sbin/routeadd-net172.16.3.0deveth0
/sbin/routeadd-host172.16.3.1eth0
/sbin/routeadd-host172.16.3.10eth0:0
/sbin/routeadd-host172.16.3.100eth0:1
/sbin/routeadddefaultgw172.16.3.200
#
问:我如何在具IP别名的机器上在不同的IP别名号码上接收电子邮件(在一部用
sendmail的机器上)?
答:*建立(如果还没有的话)一个档案,例如叫/etc/mynames.cw.不需要真的是这个
名字,也不一定要放在/etc目录下.
*在那个档案中,放上别名IP号码的完整领域名称.如果别名的IP没有领域名
称,你可以用这个IP本身.
/etc/mynames.cw:
----------------
#/etc/mynames.cw-includeallaliasesforyourmachinehere;#isacomment.
domain.one.net
domain.two.com
domain.three.org
4.5.6.7
*在你的sendmail.cf档中,在它定义档案类别巨集Fw的地方,加上:
.
.
.
##################
#localinfo#
##################
.
.
#filecontainingnamesofhostsforwhichwereceiveemail
Fw/etc/mynames.cw
.
.
.
*这样应该就可以了.以测试模式执行sendmail以测试新的设定:
ganymede$/usr/lib/sendmail-bt
ADDRESSTESTMODE(ruleset3NOTautomaticallyinvoked)
Enter<ruleset><address>
>0me@4.5.6.7
rewrite:ruleset0input:me@4.5.6.7
rewrite:ruleset98input:me@4.5.6.7
rewrite:ruleset98returns:me@4.5.6.7
rewrite:ruleset97input:me@4.5.6.7
rewrite:ruleset3input:me@4.5.6.7
rewrite:ruleset96input:me<@4.5.6.7>
rewrite:ruleset96returns:me<@4.5.6.7.>
rewrite:ruleset3returns:me<@4.5.6.7.>
rewrite:ruleset0input:me<@4.5.6.7.>
rewrite:ruleset98input:me<@4.5.6.7.>
rewrite:ruleset98returns:me<@4.5.6.7.>
rewrite:ruleset0returns:$#local$:me
rewrite:ruleset97returns:$#local$:me
rewrite:ruleset0returns:$#local$:me
>0me@4.5.6.8
rewrite:ruleset0input:me@4.5.6.8
rewrite:ruleset98input:me@4.5.6.8
rewrite:ruleset98returns:me@4.5.6.8
rewrite:ruleset97input:me@4.5.6.8
rewrite:ruleset3input:me@4.5.6.8
rewrite:ruleset96input:me<@4.5.6.8>
rewrite:ruleset96returns:me<@4.5.6.8>
rewrite:ruleset3returns:me<@4.5.6.8>
rewrite:ruleset0input:me<@4.5.6.8>
rewrite:ruleset98input:me<@4.5.6.8>
rewrite:ruleset98returns:me<@4.5.6.8>
rewrite:ruleset95input:<>me<@4.5.6.8>
rewrite:ruleset95returns:me<@4.5.6.8>
rewrite:ruleset0returns:$#smtp$@4.5.6.8$:me<@4.5.6.8>
rewrite:ruleset97returns:$#smtp$@4.5.6.8$:me<@4.5.6.8>
rewrite:ruleset0returns:$#smtp$@4.5.6.8$:me<@4.5.6.8>
>
注意,当我测试me@4.5.6.7时,它将信件送到本地机器上,因为me@4.5.6.8会
被smtpmailer拒绝.这是正常的回应.
*所有都设定完成了.
希望前面说的对某些人有用.
感谢那些在Linux及IP别名上做了伟大贡献的人们.还有特别感谢JuanJose
Ciarlante澄清我的疑问.还有感谢那些为我找出打字错误及提供建议的人!
如果你认为这份文件有用,或有改进的建议的话,请寄电子邮件给我到
h.pillay@ieee.org.
好好享受吧!
有任何问题吗?来信到h.pillay@ieee.org.