下一页 上一页 目录

6. IP- 和以太网相关信息

本节涵盖了以太网和 IP 的特定信息。这些小节被归类在一起,因为我认为它们是以前称为“技术特定”部分中最有趣的部分。任何拥有局域网的人都应该能够从这些好东西中受益。

6.1 以太网

以太网设备名称是 `eth0'、`eth1'、`eth2' 等。内核检测到的第一块网卡被分配为 `eth0',其余网卡按照检测到的顺序依次分配。

默认情况下,Linux 内核仅探测一个以太网设备,您需要将命令行参数传递给内核,以强制检测更多网卡。

要了解如何使您的以太网卡在 Linux 下工作,您应该参考 Ethernet-HOWTO

一旦您正确构建了内核以支持您的以太网卡,那么配置网卡就很容易了。

通常您会使用类似这样的方法(如果您的发行版配置为支持您的以太网,大多数发行版已经为您做了这件事)

        root# ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up
        root# route add -net 192.168.0.0 netmask 255.255.255.0 eth0
        

大多数以太网驱动程序是由 Donald Becker 开发的,becker@CESDIS.gsfc.nasa.gov

6.2 EQL - 多线路流量均衡器

EQL 设备名称是 `eql'。使用标准内核源代码,您可能每台机器只有一个 EQL 设备。EQL 提供了一种利用多条点对点线路(如 PPP、slip 或 plip)作为单个逻辑链路来传输 tcp/ip 的方法。通常,使用多条低速线路比安装一条高速线路更便宜。

内核编译选项:

        Network device support  --->
            [*] Network device support
            <*> EQL (serial line load balancing) support
        

为了支持这种机制,线路另一端的机器也必须支持 EQL。Linux、Livingstone Portmasters 和较新的拨入服务器支持兼容的设施。

要配置 EQL,您将需要 eql 工具,这些工具可以从以下位置获得:metalab.unc.edu

配置非常简单。您首先配置 eql 接口。eql 接口就像任何其他网络设备一样。您可以使用 ifconfig 实用程序配置 IP 地址和 mtu,例如

        root# ifconfig eql 192.168.10.1 mtu 1006
        

接下来,您需要手动启动您将要使用的每条线路。这些线路可以是点对点网络设备的任意组合。如何启动连接将取决于它们的链接类型,有关更多信息,请参阅相应的部分。

最后,您需要将串行链路与 EQL 设备关联起来,这称为“从属”,通过 eql_enslave 命令完成,如下所示

        root# eql_enslave eql sl0 28800
        root# eql_enslave eql ppp0 14400
        

您提供给 eql_enslave 的“估计速度”参数不会直接执行任何操作。EQL 驱动程序使用它来确定该设备应接收的数据报份额,因此您可以通过调整此值来微调线路的平衡。

要从 EQL 设备断开线路,您可以使用 eql_emancipate 命令,如下所示

        root# eql_emancipate eql sl0
        

您可以像为任何其他点对点链路添加路由一样添加路由,不同的是您的路由应该引用 eql 设备,而不是实际的串行设备本身,通常您会使用

        root# route add default eql
        

EQL 驱动程序是由 Simon Janes 开发的,simon@ncm.com

6.3 IP 记帐(适用于 Linux-2.0)

Linux 内核的 IP 记帐功能允许您收集和分析一些网络使用数据。收集的数据包括自上次重置以来累积的数据包数量和字节数。您可以指定各种规则来对数据进行分类,以满足您的任何目的。此选项已在内核 2.1.102 中删除,因为旧的基于 ipfwadm 的防火墙已被“ipfwchains”取代。

内核编译选项:

        Networking options  --->
            [*] IP: accounting
        

在您编译并安装内核后,您需要使用 ipfwadm 命令来配置 IP 记帐。您可能会选择多种不同的方式来分解记帐信息。我选择了一个简单的示例,说明什么可能对您有用,您应该阅读 ipfwadm 手册页以获取更多信息。

场景:您有一个以太网网络,该网络通过 PPP 链路连接到互联网。在以太网上,您有一台机器提供多项服务,您有兴趣了解 ftp 和万维网流量以及总 tcp 和 udp 流量分别产生了多少流量。

您可以使用如下所示的命令集,它显示为一个 shell 脚本

        #!/bin/sh
        #
        # Flush the accounting rules
        ipfwadm -A -f
        #
        # Set shortcuts
        localnet=44.136.8.96/29
        any=0/0
        # Add rules for local ethernet segment
        ipfwadm -A in  -a -P tcp -D $localnet ftp-data
        ipfwadm -A out -a -P tcp -S $localnet ftp-data
        ipfwadm -A in  -a -P tcp -D $localnet www
        ipfwadm -A out -a -P tcp -S $localnet www
        ipfwadm -A in  -a -P tcp -D $localnet
        ipfwadm -A out -a -P tcp -S $localnet
        ipfwadm -A in  -a -P udp -D $localnet
        ipfwadm -A out -a -P udp -S $localnet
        #
        # Rules for default
        ipfwadm -A in  -a -P tcp -D $any ftp-data
        ipfwadm -A out -a -P tcp -S $any ftp-data
        ipfwadm -A in  -a -P tcp -D $any www
        ipfwadm -A out -a -P tcp -S $any www
        ipfwadm -A in  -a -P tcp -D $any
        ipfwadm -A out -a -P tcp -S $any
        ipfwadm -A in  -a -P udp -D $any
        ipfwadm -A out -a -P udp -S $any
        #
        # List the rules
        ipfwadm -A -l -n
        #
        

名称“ftp-data”和“www”指的是 /etc/services 中的行。最后一个命令列出每个记帐规则并显示收集的总数。

分析 IP 记帐时需要注意的一个重要点是,所有匹配规则的总数都会递增,因此要获得差分数据,您需要执行适当的数学运算。例如,如果我想知道有多少数据既不是 ftp 也不是 www,我将从匹配所有端口的规则中减去各个总数。

root# ipfwadm -A -l -n
IP accounting rules
 pkts bytes dir prot source               destination          ports
    0     0 in  tcp  0.0.0.0/0            44.136.8.96/29       * -> 20
    0     0 out tcp  44.136.8.96/29       0.0.0.0/0            20 -> *
   10  1166 in  tcp  0.0.0.0/0            44.136.8.96/29       * -> 80
   10   572 out tcp  44.136.8.96/29       0.0.0.0/0            80 -> *
  252 10943 in  tcp  0.0.0.0/0            44.136.8.96/29       * -> *
  231 18831 out tcp  44.136.8.96/29       0.0.0.0/0             * -> *
    0     0 in  udp  0.0.0.0/0            44.136.8.96/29       * -> *
    0     0 out udp  44.136.8.96/29       0.0.0.0/0            * -> *
    0     0 in  tcp  0.0.0.0/0            0.0.0.0/0            * -> 20
    0     0 out tcp  0.0.0.0/0            0.0.0.0/0            20 -> *
   10  1166 in  tcp  0.0.0.0/0            0.0.0.0/0            * -> 80
   10   572 out tcp  0.0.0.0/0            0.0.0.0/0            80 -> *
  253 10983 in  tcp  0.0.0.0/0            0.0.0.0/0            * -> *
  231 18831 out tcp  0.0.0.0/0            0.0.0.0/0            * -> *
    0     0 in  udp  0.0.0.0/0            0.0.0.0/0            * -> *
    0     0 out udp  0.0.0.0/0            0.0.0.0/0            * -> *

6.4 IP 记帐(适用于 Linux-2.2)

新的记帐代码通过“IP 防火墙链”访问。有关更多信息,请参阅 IP 链主页。 除此之外,您现在需要使用 ipchains 而不是 ipfwadm 来配置您的过滤器。(来自最新内核源代码中的 Documentation/Changes)。

6.5 IP 别名

在某些应用中,能够为单个网络设备配置多个 IP 地址非常有用。互联网服务提供商经常使用此功能为其客户的万维网和 ftp 产品提供“定制”。您可以参考“IP-Alias mini-HOWTO”以获取比此处更多的信息。

内核编译选项:

        Networking options  --->
            ....
            [*] Network aliasing
            ....
            <*> IP: aliasing support
        

在使用 IP_Alias 支持编译并安装内核后,配置非常简单。别名被添加到与实际网络设备关联的虚拟网络设备。一个简单的命名约定适用于这些设备,即 <devname>:<virtual dev num>,例如 eth0:0ppp0:10 等。请注意,ifname:number 设备只能在接口设置完成后配置。

例如,假设您有一个以太网网络,该网络同时支持两个不同的 IP 子网,并且您希望您的机器可以直接访问这两个子网,您可以使用类似这样的方法

        root# ifconfig eth0 192.168.1.1 netmask 255.255.255.0 up
        root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0

        root# ifconfig eth0:0 192.168.10.1 netmask 255.255.255.0 up
        root# route add -net 192.168.10.0 netmask 255.255.255.0 eth0:0
        

要删除别名,您只需在其名称末尾添加一个 `-' 并引用它,就像这样简单

        root# ifconfig eth0:0- 0
        

与该别名关联的所有路由也将自动删除。

6.6 IP 防火墙(适用于 Linux-2.0)

IP 防火墙和防火墙问题在 Firewall-HOWTO 中进行了更深入的介绍。IP 防火墙允许您通过过滤或允许来自或发送到您指定的 IP 地址的数据报来保护您的机器免受未经授权的网络访问。有三种不同类别的规则:传入过滤、传出过滤和转发过滤。传入规则应用于网络设备接收的数据报。传出规则应用于将要由网络设备传输的数据报。转发规则应用于已接收但并非用于此机器的数据报,即将被路由的数据报。

内核编译选项:

        Networking options  --->
            [*] Network firewalls
            ....
            [*] IP: forwarding/gatewaying
            ....
            [*] IP: firewalling
            [ ] IP: firewall packet logging
        

IP 防火墙规则的配置使用 ipfwadm 命令执行。正如我之前提到的,安全不是我的专长,所以虽然我会提供一个您可以使用的示例,但如果安全对您很重要,您应该进行自己的研究并制定自己的规则。

IP 防火墙最常见的用途可能是在您将 Linux 机器用作路由器和防火墙网关,以保护您的本地网络免受来自网络外部的未经授权的访问时。

以下配置基于 Arnt Gulbrandsen 的贡献,<agulbra@troll.no>

该示例描述了在此图中所示的 Linux 防火墙/路由器机器上配置防火墙规则

-                                   -
 \                                  | 172.16.37.0
  \                                 |   /255.255.255.0
   \                 ---------      |
    |  172.16.174.30 | Linux |      |
NET =================|  f/w  |------|    ..37.19
    |    PPP         | router|      |  --------
   /                 ---------      |--| Mail |
  /                                 |  | /DNS |
 /                                  |  --------
-                                   -

以下命令通常放在 rc 文件中,以便在每次系统启动时自动启动它们。为了获得最大安全性,它们将在网络接口配置后执行,但在实际启动接口之前执行,以防止在防火墙机器重新启动时任何人获得访问权限。

        #!/bin/sh

        # Flush the 'Forwarding' rules table
        # Change the default policy to 'accept'
        #
        /sbin/ipfwadm -F -f
        /sbin/ipfwadm -F -p accept
        #
        # .. and for 'Incoming'
        #
        /sbin/ipfwadm -I -f
        /sbin/ipfwadm -I -p accept

        # First off, seal off the PPP interface
        # I'd love to use '-a deny' instead of '-a reject -y' but then it
        # would be impossible to originate connections on that interface too.
        # The -o causes all rejected datagrams to be logged. This trades
        # disk space against knowledge of an attack of configuration error.
        #
        /sbin/ipfwadm -I -a reject -y -o -P tcp -S 0/0 -D 172.16.174.30

        # Throw away certain kinds of obviously forged packets right away:
        # Nothing should come from multicast/anycast/broadcast addresses
        #
        /sbin/ipfwadm -F -a deny -o -S 224.0/3 -D 172.16.37.0/24
        #
        # and nothing coming from the loopback network should ever be
        # seen on a wire
        #
        /sbin/ipfwadm -F -a deny -o -S 127.0/8 -D 172.16.37.0/24
        
        # accept incoming SMTP and DNS connections, but only
        # to the Mail/Name Server
        #
        /sbin/ipfwadm -F -a accept -P tcp -S 0/0 -D 172.16.37.19 25 53
        #
        # DNS uses UDP as well as TCP, so allow that too
        # for questions to our name server
        #
        /sbin/ipfwadm -F -a accept -P udp -S 0/0 -D 172.16.37.19 53
        #
        # but not "answers" coming to dangerous ports like NFS and
        # Larry McVoy's NFS extension.  If you run squid, add its port here.
        #
        /sbin/ipfwadm -F -a deny -o -P udp -S 0/0 53 \
                -D 172.16.37.0/24 2049 2050
        
        # answers to other user ports are okay
        #
        /sbin/ipfwadm -F -a accept -P udp -S 0/0 53 \
                -D 172.16.37.0/24 53 1024:65535
        
        # Reject incoming connections to identd
        # We use 'reject' here so that the connecting host is told
        # straight away not to bother continuing, otherwise we'd experience
        # delays while ident timed out.
        #
        /sbin/ipfwadm -F -a reject -o -P tcp -S 0/0 -D 172.16.37.0/24 113

        # Accept some common service connections from the 192.168.64 and
        # 192.168.65 networks, they are friends that we trust.
        #
        /sbin/ipfwadm -F -a accept -P tcp -S 192.168.64.0/23 \
                -D 172.16.37.0/24 20:23
        
        # accept and pass through anything originating inside
        #
        /sbin/ipfwadm -F -a accept -P tcp -S 172.16.37.0/24 -D 0/0
        
        # deny most other incoming TCP connections and log them
        # (append 1:1023 if you have problems with ftp not working)
        #
        /sbin/ipfwadm -F -a deny -o -y -P tcp -S 0/0 -D 172.16.37.0/24
        
        # ... for UDP too
        #
        /sbin/ipfwadm -F -a deny -o -P udp -S 0/0 -D 172.16.37.0/24
        

良好的防火墙配置有点棘手。此示例应该为您提供一个合理的起点。ipfwadm 手册页提供了一些关于如何使用该工具的帮助。如果您打算配置防火墙,请务必四处询问,从您认为可靠的来源获得尽可能多的建议,并找人从外部测试/健全性检查您的配置。

6.7 IP 防火墙(适用于 Linux-2.2)

新的防火墙代码通过“IP 防火墙链”访问。有关更多信息,请参阅 IP 链主页。 除此之外,您现在需要使用 ipchains 而不是 ipfwadm 来配置您的过滤器。(来自最新内核源代码中的 Documentation/Changes)。

我们意识到这是一个严重过时的声明,我们目前正在努力使本节内容更加最新。您可以期待在 1999 年 8 月获得更新的版本。

6.8 IPIP 封装

您为什么要将 IP 数据报封装在 IP 数据报中?如果您以前从未见过它的应用,这似乎是一件奇怪的事情。好的,以下是一些常见的应用场景:移动 IP 和 IP 多播。然而,它最广泛的用途也许也是最不为人所知的,业余无线电。

内核编译选项:

        Networking options  --->
            [*] TCP/IP networking
            [*] IP: forwarding/gatewaying
            ....
            <*> IP: tunneling
        

IP 隧道设备称为 `tunl0'、`tunl1' 等。

“但是为什么呢?”。好的,好的。传统的 IP 路由规则规定 IP 网络包含网络地址和网络掩码。这产生了一系列连续的地址,所有这些地址都可以通过单个路由条目路由。这非常方便,但这意味着您只能在连接到其所属的特定网络部分时使用任何特定的 IP 地址。在大多数情况下,这没问题,但如果您是移动网民,那么您可能无法始终保持连接到一个地方。IP/IP 封装(IP 隧道)允许您通过允许将发往您的 IP 地址的数据报包装起来并重定向到另一个 IP 地址来克服此限制。如果您知道您将在某个其他 IP 网络中运行一段时间,您可以设置一台机器在您的家庭网络上接受发往您的 IP 地址的数据报,并将它们重定向到您实际将临时使用的地址。

隧道网络配置。

 192.168.1/24                          192.168.2/24

     -                                     -
     |      ppp0 =            ppp0 =       |
     |  aaa.bbb.ccc.ddd  fff.ggg.hhh.iii   |
     |                                     |
     |   /-----\                 /-----\   |
     |   |     |       //        |     |   |
     |---|  A  |------//---------|  B  |---|
     |   |     |     //          |     |   |
     |   \-----/                 \-----/   |
     |                                     |
     -                                     -
该图说明了使用 IPIP 封装的另一个可能原因,虚拟专用网络。此示例预先假定您有两台机器,每台机器都有一个简单的拨号互联网连接。每个主机仅分配一个 IP 地址。在这些机器的后面是一些私有局域网,配置了保留的 IP 网络地址。假设您希望允许网络 A 上的任何主机连接到网络 B 上的任何主机,就像它们已通过网络路由正确连接到互联网一样。IPIP 封装将允许您执行此操作。请注意,封装不能解决网络 A 和 B 上的主机如何与互联网上的任何其他主机通信的问题,您仍然需要像 IP Masquerade 这样的技巧才能实现。封装通常由充当路由器的机器执行。

Linux 路由器 `A' 将使用如下脚本进行配置

        #!/bin/sh
        PATH=/sbin:/usr/sbin
        mask=255.255.255.0
        remotegw=fff.ggg.hhh.iii
        #
        # Ethernet configuration
        ifconfig eth0 192.168.1.1 netmask $mask up
        route add -net 192.168.1.0 netmask $mask eth0
        #
        # ppp0 configuration (start ppp link, set default route)
        pppd
        route add default ppp0
        #
        # Tunnel device configuration
        ifconfig tunl0 192.168.1.1 up
        route add -net 192.168.2.0 netmask $mask gw $remotegw tunl0
        

Linux 路由器 `B' 将使用类似的脚本进行配置

        #!/bin/sh
        PATH=/sbin:/usr/sbin
        mask=255.255.255.0
        remotegw=aaa.bbb.ccc.ddd
        #
        # Ethernet configuration
        ifconfig eth0 192.168.2.1 netmask $mask up
        route add -net 192.168.2.0 netmask $mask eth0
        #
        # ppp0 configuration (start ppp link, set default route)
        pppd
        route add default ppp0
        #
        # Tunnel device configuration
        ifconfig tunl0 192.168.2.1 up
        route add -net 192.168.1.0 netmask $mask gw $remotegw tunl0
        

命令

        route add -net 192.168.1.0 netmask $mask gw $remotegw tunl0
        
读取为:“将任何发往 192.168.1.0/24 的数据报封装在 IPIP 封装数据报中,目标地址为 aaa.bbb.ccc.ddd”。

请注意,配置在两端都是相互的。隧道设备使用路由中的 `gw' 作为 IP 数据报的目标,它将在其中放置它接收到的要路由的数据报。该机器必须知道如何解封装 IPIP 数据报,也就是说,它也必须配置隧道设备。

隧道主机配置。

不必路由整个网络。例如,您可以仅路由单个 IP 地址。在这种情况下,您可以使用其家庭 IP 地址在“远程”机器上配置 tunl 设备,并在 A 端仅使用主机路由(和代理 Arp),而不是通过隧道设备的网络路由。让我们重新绘制并适当地修改我们的配置。现在我们只有主机 `B',我们希望它表现得好像它既完全连接到互联网,又是主机 `A' 支持的远程网络的一部分

 192.168.1/24

     -
     |      ppp0 =                ppp0 =
     |  aaa.bbb.ccc.ddd      fff.ggg.hhh.iii
     |
     |   /-----\                 /-----\
     |   |     |       //        |     |
     |---|  A  |------//---------|  B  |
     |   |     |     //          |     |
     |   \-----/                 \-----/
     |                      also: 192.168.1.12
     -

Linux 路由器 `A' 将配置为

        #!/bin/sh
        PATH=/sbin:/usr/sbin
        mask=255.255.255.0
        remotegw=fff.ggg.hhh.iii
        #
        # Ethernet configuration
        ifconfig eth0 192.168.1.1 netmask $mask up
        route add -net 192.168.1.0 netmask $mask eth0
        #
        # ppp0 configuration (start ppp link, set default route)
        pppd
        route add default ppp0
        #
        # Tunnel device configuration
        ifconfig tunl0 192.168.1.1 up
        route add -host 192.168.1.12 gw $remotegw tunl0
        #
        # Proxy ARP for the remote host
        arp -s 192.168.1.12 xx:xx:xx:xx:xx:xx pub
        

Linux 主机 `B' 将配置为

        #!/bin/sh
        PATH=/sbin:/usr/sbin
        mask=255.255.255.0
        remotegw=aaa.bbb.ccc.ddd 
        #
        # ppp0 configuration (start ppp link, set default route)
        pppd
        route add default ppp0
        #
        # Tunnel device configuration
        ifconfig tunl0 192.168.1.12 up
        route add -net 192.168.1.0 netmask $mask gw $remotegwtunl0
        

这种配置更典型地用于移动 IP 应用程序。单个主机希望在互联网上漫游并始终保持单个可用的 IP 地址。您应该参考移动 IP 部分,以获取有关如何在实践中处理此问题的更多信息。

6.9 IP 地址伪装

许多人都有一个简单的拨号帐户来连接到互联网。几乎每个使用这种配置的人都由互联网服务提供商分配一个 IP 地址。这通常足以仅允许一台主机完全访问网络。IP 地址伪装是一个巧妙的技巧,它使您可以使用一个 IP 地址让多台机器使用,通过使其他主机看起来像(因此称为伪装)支持拨号连接的机器。有一个小小的警告,那就是伪装功能几乎总是只在一个方向上工作,也就是说,伪装主机可以拨出,但它们不能接受或接收来自远程主机的网络连接。这意味着某些网络服务无法工作,例如 talk,而其他服务(例如 ftp)必须配置为在被动 (PASV) 模式下运行才能运行。幸运的是,最常见的网络服务(例如 telnet、万维网和 irc)都可以正常工作。

内核编译选项:

        Code maturity level options  --->
            [*] Prompt for development and/or incomplete code/drivers
        Networking options  --->
            [*] Network firewalls
            ....
            [*] TCP/IP networking
            [*] IP: forwarding/gatewaying
            ....
            [*] IP: masquerading (EXPERIMENTAL)
        

通常,您的 Linux 机器支持 slip 或 PPP 拨号线路,就像它是一台独立机器一样。此外,它还将配置另一个网络设备,可能是以太网,配置为保留的网络地址之一。要伪装的主机将位于此第二个网络上。这些主机中的每一个都将 Linux 机器的以太网端口的 IP 地址设置为其默认网关或路由器。

一个典型的配置可能看起来像这样

-                                   -
 \                                  | 192.168.1.0
  \                                 |   /255.255.255.0
   \                 ---------      |
    |                | Linux | .1.1 |
NET =================| masq  |------|
    |    PPP/slip    | router|      |  --------
   /                 ---------      |--| host |
  /                                 |  |      |
 /                                  |  --------
-                                   -
使用 IPFWADM 进行伪装

此配置最相关的命令是

        # Network route for ethernet
        route add -net 192.168.1.0 netmask 255.255.255.0 eth0
        #
        # Default route to the rest of the internet.
        route add default ppp0
        #
        # Cause all hosts on the 192.168.1/24 network to be masqueraded.
        ipfwadm -F -a m -S 192.168.1.0/24 -D 0.0.0.0/0 
        

使用 IPCHAINS 进行伪装

这类似于使用 IPFWADM,但命令结构已更改

        # Network route for ethernet
        route add -net 192.168.1.0 netmask 255.255.255.0 eth0
        #
        # Default route to the rest of the internet.
        route add default ppp0
        #
        # Cause all hosts on the 192.168.1/24 network to be masqueraded.
        ipchains -A forward -s 192.168.1.0/24 -j MASQ
        

您可以从 IP 伪装资源页面 获取有关 Linux IP 伪装功能的更多信息。此外,关于伪装的非常详细的文档是“IP-Masquerade mini-HOWTO”(其中还介绍了如何配置其他操作系统以与 Linux 伪装服务器一起运行)。

6.10 IP 透明代理

IP 透明代理是一项功能,它使您能够将发往另一台机器的服务器或服务重定向到此机器上的那些服务。通常,当您将 Linux 机器用作路由器并提供代理服务器时,这将非常有用。您可以将所有发往远程服务的连接重定向到本地代理服务器。

内核编译选项:

        Code maturity level options  --->
                [*] Prompt for development and/or incomplete code/drivers
        Networking options  --->
                [*] Network firewalls
                ....
                [*] TCP/IP networking
                ....
                [*] IP: firewalling
                ....
                [*] IP: transparent proxy support (EXPERIMENTAL)
        

透明代理功能的配置使用 ipfwadm 命令执行

一个可能有用的例子如下

        root# ipfwadm -I -a accept -D 0/0 telnet -r 2323
        

此示例将导致任何尝试连接到任何主机上的端口 telnet (23) 的尝试都重定向到此主机上的端口 2323。如果您在该端口上运行服务,您可以转发 telnet 连接、记录它们或执行任何适合您需求的操作。

一个更有趣的例子是通过本地缓存重定向所有 http 流量。但是,代理服务器使用的协议与本机 http 不同:客户端连接到 www.server.com:80 并请求 /path/page,当它连接到本地缓存时,它会联系 proxy.local.domain:8080 并请求 www.server.com/path/page

要通过本地代理过滤 http 请求,您需要通过插入一个小服务器来调整协议,该服务器称为 transproxy(您可以在万维网上找到它)。您可以选择在端口 8081 上运行 transproxy,并发出此命令

        root# ipfwadm -I -a accept -D 0/0 80 -r 8081
        
然后,transproxy 程序将接收所有旨在到达外部服务器的连接,并在修复协议差异后将它们传递给本地代理。

6.11 IPv6

就在您认为您开始理解 IP 网络时,规则发生了变化!IPv6 是互联网协议版本 6 的简写符号。IPv6 的开发主要是为了克服互联网社区中对 IP 地址分配即将短缺的担忧。IPv6 地址长 16 字节(128 位)。IPv6 包含许多其他更改,主要是简化,这将使 IPv6 网络比 IPv4 网络更易于管理。

Linux 已经在 2.2.* 系列内核中实现了工作但未完成的 IPv6 实现。

如果您希望尝试使用下一代互联网技术,或者对此有需求,那么您应该阅读 IPv6-FAQ,该 FAQ 可从 www.terra.net 获得。

6.12 移动 IP

术语“IP 移动性”描述了主机能够将其网络连接从互联网上的一个点移动到另一个点,而无需更改其 IP 地址或丢失连接的能力。通常,当 IP 主机更改其连接点时,它还必须更改其 IP 地址。IP 移动性通过为移动主机分配固定的 IP 地址并使用 IP 封装(隧道)和自动路由来克服此问题,以确保发往它的数据报被路由到它当前正在使用的实际 IP 地址。

一个项目正在进行中,旨在为 Linux 提供一套完整的 IP 移动性工具。项目的状态和工具可以从以下位置获得:Linux 移动 IP 主页

6.13 多播

IP 多播允许不限数量的不同 IP 网络上的 IP 主机同时接收路由到它们的数据报。这种机制被利用来提供互联网范围的“广播”材料,例如音频和视频传输以及其他新颖的应用程序。

内核编译选项:

Networking options  --->
        [*] TCP/IP networking
        ....
        [*] IP: multicasting

需要一套工具和一些次要的网络配置。请查看 Multicast-HOWTO 以获取有关 Linux 中多播支持的更多信息。

6.14 NAT - 网络地址转换

IP 网络地址转换工具几乎是 Linux IP 地址伪装工具的标准化大型版本。它在 RFC-1631 中详细说明,您可以在最近的 RFC 存档中找到它。NAT 提供了 IP 地址伪装不具备的功能,这使其非常适合在企业防火墙路由器设计和更大规模的安装中使用。

Michael.Hasenstein,Michael.Hasenstein@informatik.tu-chemnitz.de,为 Linux 2.0.29 内核开发了 NAT 的 alpha 实现。Michaels 的文档和实现可从以下位置获得:Linux IP 网络地址网页

较新的 Linux 2.2.x 内核还在路由算法中包含了一些 NAT 功能。

6.15 流量整形器 - 更改允许的带宽

流量整形器是一个驱动程序,它创建新的接口设备,这些设备的流量以用户定义的方式受到限制,它们依赖于物理网络设备进行实际传输,并且可以用作网络流量的传出路由。

整形器在 Linux-2.1.15 中引入,并反向移植到 Linux-2.0.36(它出现在 Alan Cox 分发的 2.0.36-pre-patch-2 中,Alan Cox 是整形器设备的作者和 Linux-2.0 的维护者)。

流量整形器只能作为模块编译,并通过 shapecfg 程序使用如下命令进行配置

        shapecfg attach shaper0 eth1
        shapecfg speed shaper0 64000
        

整形器设备只能控制传出流量的带宽,因为数据包仅根据路由表通过整形器传输;因此,“按源地址路由”功能可以帮助限制使用 Linux 路由器的特定主机的总带宽。

Linux-2.2 已经支持此类路由,如果您需要在 Linux-2.0 中使用它,请查看 Mike McLagan 的补丁,地址为 ftp.invlogic.com。有关整形器的更多信息,请参阅 Documentationnetworking/shaper.txt。

如果您想尝试对传入数据包进行(试探性)整形,请尝试 rshaper-1.01(或更新版本),来自 ftp.systemy.it

6.16 Linux-2.2 中的路由

最新版本的 Linux 2.2 在路由策略方面提供了很大的灵活性。不幸的是,您必须等待本 howto 的下一个版本,或者阅读内核源代码。


下一页 上一页 目录