热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

IPAliasminiHOWTO如何在Linux机器上设定IP别名

原始文件:LinuxIPAliasminiHOWTO翻译日期:19971023翻译维护:cwhuang@phys.ntu.edu.tw-------------------
原始文件:Linux IP Alias mini HOWTO
翻译日期:1997/10/23
翻译维护:cwhuang@phys.ntu.edu.tw
----------------------------------------------------------------------------------------------

本文最後修改日期: January 13th 1997.

如何在 Linux 机器上设定 IP 别名(aliasing)

 GNU Copyleft 1996/1997 Harish Pillay (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 以後就可以.
* 将 IP Alias 编译成可载入模组.你在用 "make config" 指令编译核心时,如果要
把 IP Masq 编译成模组(Modules)应会被问到.查看 Modules HOWTO(如果有的话)
或是查看 /usr/src/linux/Documentation/modules.txt 中的资讯.
* 我在已分配给我的 IP 之外还又要了两个额外的 IP.
* 一片 D-Link DE620 网路卡(不重要,任何 Linux 支援的网路卡都行).


指令:

* 首先载入 IP Alias 模组(如果你将它编译进核心可跳过此步骤):

/sbin/insmod /lib/modules/`uname -r`/ipv4/ip_alias.o

* 再来,建立回绕(loopback)装置,以及 eth0 界面上以主 IP 号码为开头的所有 IP
号码:

 /sbin/ifconfig lo 127.0.0.1
 /sbin/ifconfig eth0 up
 /sbin/ifconfig eth0 172.16.3.1
 /sbin/ifconfig eth0:0 172.16.3.10
 /sbin/ifconfig eth0:1 172.16.3.100

172.16.3.1 是主 IP 号码,而 .10 及 .100 是别名.比较奇怪的地方是 eth0:x,
其中 x=0, 1, 2, ... n 在每一不同的 IP 号码上.主 IP 号码不需要这个.

* 第三步是建立递送路径.首先,递送到回绕装置,然後是区域网路,最後是不同的 
IP 号码及预设递送路径:

 /sbin/route add -net 127.0.0.0
 /sbin/route add -net 172.16.3.0 dev eth0
 /sbin/route add -host 172.16.3.1 dev eth0
 /sbin/route add -host 172.16.3.10 dev eth0:0
 /sbin/route add -host 172.16.3.100 dev eth0:1
 /sbin/route add default gw 172.16.3.200

就这样了.

在上面的例子中,为了说明我用的是 RFC 1918 所定义的私用 IP 号码.用你正式或
私有的 IP 号码来取代它.

上面的例子只展示了三个 IP 号码.在 /usr/include/linux/net_alias.h 中定义的
最大值是 256.在一片网路卡上 256 个 IP 号码已经很多了 :-)!

我用 /sbin/ifconfig 看起来像这样:

loLink encap:Local Loopback
inet addr:127.0.0.1Bcast:127.255.255.255Mask:255.0.0.0
UP BROADCAST LOOPBACK RUNNINGMTU:3584Metric:1
RX packets:5088 errors:0 dropped:0 overruns:0
TX packets:5088 errors:0 dropped:0 overruns:0

eth0Link encap:10Mbps EthernetHWaddr 00:8E:B8:83:19:20
inet addr:172.16.3.1Bcast:172.16.3.255Mask:255.255.255.0
UP BROADCAST RUNNING PROMISC MULTICASTMTU:1500Metric:1
RX packets:334036 errors:0 dropped:0 overruns:0
TX packets:11605 errors:0 dropped:0 overruns:0
Interrupt:7 Base address:0x378

eth0:0Link encap:10Mbps EthernetHWaddr 00:8E:B8:83:19:20
inet addr:172.16.3.10Bcast:172.16.3.255Mask:255.255.255.0
UP BROADCAST RUNNINGMTU:1500Metric:1
RX packets:0 errors:0 dropped:0 overruns:0
TX packets:0 errors:0 dropped:0 overruns:0

eth0:1Link encap:10Mbps EthernetHWaddr 00:8E:B8:83:19:20
inet addr:172.16.3.100Bcast:172.16.3.255Mask:255.255.255.0
UP BROADCAST RUNNINGMTU:1500Metric:1
RX packets:1 errors:0 dropped:0 overruns:0
TX packets:0 errors:0 dropped:0 overruns:0

而 /proc/net/aliases 是

device family address
eth0:0 2172.16.3.10
eth0:1 2172.16.3.100

而 /proc/net/alias_types 是

typenamen_attach
2 ip2

当然,/proc/net 的内容是由 ifconfig 指令产生而非用手写的!


问: 如何在重新启动机器後保持设定?
答: 不论你是用 BSD 形式或是 SysV 形式(例如 Red Hat)的 init 启动,你都可以把它
放在 /etc/rc.d/rc.local 中.下面是我在我的 SysV init 系统(Red Hat 3.0.3 
及 4.0)中的设定:

 * 我的 /etc/rc.d/rc.local: (修改过只显示相关的部份)

 #setting up IP alias interfaces
 echo "Setting 172.16.3.1, 172.16.3.10, 172.16.3.100 IP Aliases ..."
 /sbin/ifconfig lo 127.0.0.1
 /sbin/ifconfig eth0 up
 /sbin/ifconfig eth0 172.16.3.1
 /sbin/ifconfig eth0:0 172.16.3.10
 /sbin/ifconfig eth0:1 172.16.3.100
 #setting up the routes
 echo "Setting IP routes ..."
 /sbin/route add -net 127.0.0.0
 /sbin/route add -net 172.16.3.0 dev eth0
 /sbin/route add -host 172.16.3.1 eth0
 /sbin/route add -host 172.16.3.10 eth0:0
 /sbin/route add -host 172.16.3.100 eth0:1
 /sbin/route add default gw 172.16.3.200
 #


问: 我如何在具 IP 别名的机器上在不同的 IP 别名号码上接收电子邮件(在一部用
sendmail 的机器上)?
答: * 建立(如果还没有的话)一个档案,例如叫 /etc/mynames.cw.不需要真的是这个
名字,也不一定要放在 /etc 目录下.

* 在那个档案中,放上别名 IP 号码的完整领域名称.如果别名的 IP 没有领域名
称,你可以用这个 IP 本身. /etc/mynames.cw:
 ----------------
 # /etc/mynames.cw - include all aliases for your machine here; # is a comment.
 domain.one.net
 domain.two.com
 domain.three.org
 4.5.6.7

* 在你的 sendmail.cf 档中,在它定义档案类别巨集 Fw 的地方,加上:

 .
 .
 .
 ##################
 # local info #
 ##################
 .
 .
 # file containing names of hosts for which we receive email
 Fw/etc/mynames.cw
 .
 .
 .

* 这样应该就可以了.以测试模式执行 sendmail 以测试新的设定:

 ganymede$ /usr/lib/sendmail -bt
 ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
 Enter < ruleset> < address>
 > 0 me@4.5.6.7
 rewrite: ruleset0 input: me @ 4 . 5 . 6 . 7
 rewrite: ruleset 98 input: me @ 4 . 5 . 6 . 7
 rewrite: ruleset 98 returns: me @ 4 . 5 . 6 . 7
 rewrite: ruleset 97 input: me @ 4 . 5 . 6 . 7
 rewrite: ruleset3 input: me @ 4 . 5 . 6 . 7
 rewrite: ruleset 96 input: me < @ 4 . 5 . 6 . 7 >
 rewrite: ruleset 96 returns: me < @ 4 . 5 . 6 . 7 . >
 rewrite: ruleset3 returns: me < @ 4 . 5 . 6 . 7 . >
 rewrite: ruleset0 input: me < @ 4 . 5 . 6 . 7 . >
 rewrite: ruleset 98 input: me < @ 4 . 5 . 6 . 7 . >
 rewrite: ruleset 98 returns: me < @ 4 . 5 . 6 . 7 . >
 rewrite: ruleset0 returns: $# local $: me
 rewrite: ruleset 97 returns: $# local $: me
 rewrite: ruleset0 returns: $# local $: me
 > 0 me@4.5.6.8
 rewrite: ruleset0 input: me @ 4 . 5 . 6 . 8
 rewrite: ruleset 98 input: me @ 4 . 5 . 6 . 8
 rewrite: ruleset 98 returns: me @ 4 . 5 . 6 . 8
 rewrite: ruleset 97 input: me @ 4 . 5 . 6 . 8
 rewrite: ruleset3 input: me @ 4 . 5 . 6 . 8
 rewrite: ruleset 96 input: me < @ 4 . 5 . 6 . 8 >
 rewrite: ruleset 96 returns: me < @ 4 . 5 . 6 . 8 >
 rewrite: ruleset3 returns: me < @ 4 . 5 . 6 . 8 >
 rewrite: ruleset0 input: me < @ 4 . 5 . 6 . 8 >
 rewrite: ruleset 98 input: me < @ 4 . 5 . 6 . 8 >
 rewrite: ruleset 98 returns: me < @ 4 . 5 . 6 . 8 >
 rewrite: ruleset 95 input: < > me < @ 4 . 5 . 6 . 8 >
 rewrite: ruleset 95 returns: me < @ 4 . 5 . 6 . 8 >
 rewrite: ruleset0 returns: $# smtp $@ 4 . 5 . 6 . 8 $: me < @ 4 . 5 . 6 . 8 >
 rewrite: ruleset 97 returns: $# smtp $@ 4 . 5 . 6 . 8 $: me < @ 4 . 5 . 6 . 8 >
 rewrite: ruleset0 returns: $# smtp $@ 4 . 5 . 6 . 8 $: me < @ 4 . 5 . 6 . 8 >
 >

注意,当我测试 me@4.5.6.7 时,它将信件送到本地机器上,因为 me@4.5.6.8 会
被 smtp mailer 拒绝.这是正常的回应.

* 所有都设定完成了.

希望前面说的对某些人有用.

感谢那些在 Linux 及 IP 别名上做了伟大贡献的人们.还有特别感谢 Juan Jose 
Ciarlante 澄清我的疑问.还有感谢那些为我找出打字错误及提供建议的人!

如果你认为这份文件有用,或有改进的建议的话,请寄电子邮件给我到
h.pillay@ieee.org.

好好享受吧!

有任何问题吗? 来信到 h.pillay@ieee.org.

推荐阅读
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 本文详细介绍了如何使用Python中的smtplib库来发送带有附件的邮件,并提供了完整的代码示例。作者:多测师_王sir,时间:2020年5月20日 17:24,微信:15367499889,公司:上海多测师信息有限公司。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 在 CentOS 6.4 上安装 QT5 并启动 Qt Creator 时,可能会遇到缺少 GLIBCXX_3.4.15 的问题。这是由于系统中的 libstdc++.so.6 版本过低。本文将详细介绍如何通过更新 GCC 版本来解决这一问题。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 字符串学习时间:1.5W(“W”周,下同)知识点checkliststrlen()函数的返回值是什么类型的?字 ... [详细]
  • 本文将详细介绍如何注册码云账号、配置SSH公钥、安装必要的开发工具,并逐步讲解如何下载、编译 HarmonyOS 2.0 源码。通过本文,您将能够顺利完成 HarmonyOS 2.0 的环境搭建和源码编译。 ... [详细]
  • 基于Linux开源VOIP系统LinPhone[四]
    ****************************************************************************************** ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
author-avatar
coco2冰冰
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有