⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 network-routing.html

📁 这是很好的学习嵌入式LINUX的文章
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<p>你可以很轻易地通过<ttclass="FILENAME">/etc/rc.conf</tt>文件设定默认路由。在我们的实例里,在主机<ttclass="HOSTID">Local2</tt>里,我们在文件<ttclass="FILENAME">/etc/rc.conf</tt>里增加了下边内容:</p><pre class="PROGRAMLISTING">defaultrouter="10.20.30.1"</pre><p>也可以直接在命令行使用<span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">route</span>(8)</span>命令:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">route add default 10.20.30.1</kbd></pre><p>想要了解更多关于手工处理网络路由表的信息,参考<span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">route</span>(8)</span>手册页。</p></div><div class="SECT2"><h2 class="SECT2"><a id="AEN35514" name="AEN35514">24.2.3. 重宿主机(Dual HomedHosts)</a></h2><p>还有一种其它的类型的配置是我们要提及的,这就是一个主机处于两个不同的网络。技术上,任何做为网关(上边的实例中,使用了PPP连接)的机子就算作是重宿主机。但这个词实际上仅用来指那种处于两个局域网这中的机子。</p><p>有一种情形,一台机子有两个网卡,对于各个子网都有个自的一个地址。另一种情况,这台机子仅有一张网卡,但使用<span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">ifconfig</span>(8)</span>做了别名。如果有两个独立的以太网在使用的情形就使用前者,如果只有一个物理网段,但逻辑上分成了两个独立的子网,就使用后者。</p><p>每种情况都要设置路由表以便两子网都知道这台主机是到其它子网的网关——入站路由(inboundroute)。将一台主机配置成两个子网间的路由器,这种配置经常在我们需要实现单向或双向的包过滤或防火墙时被用到。</p><p>如果想让主机在两个接口间转发数据包,你需要激活FreBSD的这项功能。至于怎么做,请看下一部分了解更多。</p></div><div class="SECT2"><h2 class="SECT2"><a id="NETWORK-DEDICATED-ROUTER"name="NETWORK-DEDICATED-ROUTER">24.2.4. 建立路由器</a></h2><p>网络路由器只是一个将数据包从一个接口转发到另一个接口的系统。互联网标准和良好的工程实践阻止了FreeBSD计划在FreeBSD中把它置成默认地。你在可以在<span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">rc.conf</span>(5)</span>中改变下列变量的值为<varclass="LITERAL">YES</var>,使用这个功能生效:</p><pre class="PROGRAMLISTING">gateway_enable=YES          # Set to YES if this host will be a gateway</pre><p>这个选项会把<span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">sysctl</span>(8)</span> 变量——<varclass="VARNAME">net.inet.ip.forwarding</var> 设置成 <varclass="LITERAL">1</var>。如果你要临时地停止路由,你可以把它重为<varclass="LITERAL">0</var>。</p><p>新的路由器需要有路由才知道将数据传向何处。如果网络够简单,你可以使用静态路由。FreeBSD也自带一个标准的BSD路由选择守护进程<span class="CITEREFENTRY"><span class="REFENTRYTITLE">routed</span>(8)</span>,称之为 RIP (version 1和 version 2)和IRDP。对 BGP v4, OSPF v2和其它复杂路由选择协议的支持可以从<ahref="http://www.FreeBSD.org/cgi/url.cgi?ports/net/zebra/pkg-descr"><ttclass="FILENAME">net/zebra</tt></a>包中得到。 像<b class="APPLICATION"><spanclass="TRADEMARK">GateD</span>&reg;</b>一样的商业产品也提供了更复杂的网络路由解决方案。</p><p>即使FreeBSD按照这种方法进行了配置,它也并不完全符合Internet标准对路由器的要求。但对于一般应用已经足够了。</p></div><div class="SECT2"><h2 class="SECT2"><a id="AEN35556" name="AEN35556">24.2.5. 设置静态路由</a></h2><i class="AUTHORGROUP"><span class="CONTRIB">贡献者:</span>Coranth Gryphon.</i> <iclass="AUTHORGROUP"><span class="CONTRIB">中文翻译:</span> 张 雪平 和 袁 苏义.</i> <div class="SECT3"><h3 class="SECT3"><a id="AEN35575" name="AEN35575">24.2.5.1. 手动配置</a></h3><p>假设如下这样一个网络:</p><p><img src="advanced-networking/static-routes.png" /></p><p>在这里, <tt class="HOSTID">RouterA</tt> 是我们的 FreeBSD机子,它充当连接到互联网其它部分的路由器的角色。默认路由设置为<ttclass="HOSTID">10.0.0.1</tt>,它就允许与外界连接。我们假定已经正确配置了<ttclass="HOSTID">RouterB</tt>,并且知道如何连接到想去的任何地方。(在这个图里很简单。只须在<tt class="HOSTID">RouterB</tt>上增加默认路由,使用<ttclass="HOSTID">192.168.1.1</tt>做为网关。)</p><p>如果我们查看一下<ttclass="HOSTID">RouterA</tt>的路由表,我们就会看到如下一些内容:</p><pre class="SCREEN"><samp class="PROMPT">%</samp> <kbd class="USERINPUT">netstat -nr</kbd>Routing tablesInternet:Destination        Gateway            Flags    Refs      Use  Netif  Expiredefault            10.0.0.1           UGS         0    49378    xl0127.0.0.1          127.0.0.1          UH          0        6    lo010.0.0/24          link#1             UC          0        0    xl0192.168.1/24       link#2             UC          0        0    xl1</pre><p>使用当前的路由表, <tt class="HOSTID">RouterA</tt> 是不能到达我们的内网——InternalNet 2的。它没有到<ttclass="HOSTID">192.168.2.0/24</tt>的路由。一种可以接受的方法是手工增加这条路由。以下的命令会把InternalNet 2 网络加入到<tt class="HOSTID">RouterA</tt>的路由表中,使用<ttclass="HOSTID">192.168.1.2</tt>做为下一个跳跃:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbdclass="USERINPUT">route add -net 192.168.2.0/24 192.168.1.2</kbd></pre><p>现在<tt class="HOSTID">RouterA</tt> 就可以到达<tt class="HOSTID">192.168.2.0/24</tt>网络上的任何主机了。</p></div><div class="SECT3"><h3 class="SECT3"><a id="AEN35605" name="AEN35605">24.2.5.2. 永久的配置</a></h3><p>上面的实例对于运行着的系统来说配置静态路由是相当不错了。只是,有一个问题——如果你重启你的FreeBSD机子,路由信息就会消失。处理附加的静态路由的方法是把它放到你的<tt class="FILENAME">/etc/rc.conf</tt>文件里去。</p><pre class="PROGRAMLISTING"># Add Internal Net 2 as a static routestatic_routes="internalnet2"route_internalnet2="-net 192.168.2.0/24 192.168.1.2"</pre><p>配置变量<varclass="LITERAL">static_routes</var>是一串以空格格开的字符串。每一串表示一个路由名字。在上面的例子中我们中有一个串在<var class="LITERAL">static_routes</var>里。 这个字符串中<varclass="REPLACEABLE">internalnet2</var>。然后我们新增一个配置变量<varclass="LITERAL">route_<varclass="REPLACEABLE">internalnet2</var></var>,这里我们把所有传给 <spanclass="CITEREFENTRY"><spanclass="REFENTRYTITLE">route</span>(8)</span>命令的参数拿了过来。在上面的实例中的我使用的命令是:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbdclass="USERINPUT">route add -net 192.168.2.0/24 192.168.1.2</kbd></pre><p>因此,我们需要的是 <var class="LITERAL">"-net 192.168.2.0/24 192.168.1.2"</var>。</p><p>前边已经说了,我们可以有不只一个字符串的<varclass="LITERAL">static_routes</var>里边。下面我们就建立多个静态路由。下面几行显示了一个为<tt class="HOSTID">192.168.0.0/24</tt> 和 <ttclass="HOSTID">192.168.1.0/24</tt>网络在一个假想的路由器上增加静态路由的例子:</p><pre class="PROGRAMLISTING">static_routes="net1 net2" route_net1="-net 192.168.0.0/24 192.168.0.1" route_net2="-net 192.168.1.0/24 192.168.1.1"</pre></div></div><div class="SECT2"><h2 class="SECT2"><a id="AEN35629" name="AEN35629">24.2.6. 路由传播</a></h2><p>我们已经讨论了如何定义通向外界的路由,但未谈及外界是如何找到我们的。</p><p>我们已经知道可以设置路由表,这样任何指向特定地址空间(在我们的例子中是一个C类子网)的数据都会被送往网络上特定的主机,然后由这台主机向地址空间内部转发数据。</p><p>当你得到一个分配给你的网络的地址空间时,ISP(网络服务商)会设置它们的路由表,这样指向你子网的数据就会通过PPP连接下传到你的网络。但是其它跨越国界的网络是如何知道将数据传给你的ISP的呢?</p><p>有一个系统(很像分布式DNS信息系统),它一直跟踪被分配的地址空间,并说明它们连接到互联网骨干(Internetbackbone)的点。``骨干(Backbone)''指的是负责全世界和跨国的传输的主要干线。每一台骨干主机(backbonemachine)有一份主要表集的拷贝,它将发送给特定网络的数据导向相应的骨干载体上(backbonecarrier),从结点往下遍历服务提供商链,直到数据到达你的网络。</p><p>服务提供商的任务是向骨干网络广播他们就是到到达你的网点的连接结点(以及进入的路径)。这就是路由传播。</p></div><div class="SECT2"><h2 class="SECT2"><a id="AEN35639" name="AEN35639">24.2.7. 问题解答</a></h2><p>有时候,路由传播会有一个问题,一些网络无法与你连接。或许能帮你找出路由是在哪里中断的最有用的命令就是<span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">traceroute</span>(8)</span>了。当你无法与远程主机连接时,这个命令一样有用(例如<span class="CITEREFENTRY"><span class="REFENTRYTITLE">ping</span>(8)</span> 失败)。</p><p><span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">traceroute</span>(8)</span>命令将以你想连接的主机的名字作为参数执行。不管是到达了目标,还是因为没有连接而终止,它都会显示所经过的所有网关主机。</p><p>想了解更多的信息,查看<span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">traceroute</span>(8)</span>的手册。</p></div><div class="SECT2"><h2 class="SECT2"><a id="AEN35659" name="AEN35659">24.2.8. 多播路由</a></h2><p>FreeBSD一开始就支持多播应用软件和多播路由选择。多播程序并不要求FreeBSD的任何特殊的配置,就可以工作得很好。多播路由需要支持被编译入内核:</p><pre class="PROGRAMLISTING">options MROUTING</pre><p>另外,多播路由守护进程——<span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">mrouted</span>(8)</span> 必须通过<ttclass="FILENAME">/etc/mrouted.conf</tt>配置来开启通道和<acronymclass="ACRONYM">DVMRP</acronym>。更多关于多播路由配置的信息可以在<spanclass="CITEREFENTRY"><spanclass="REFENTRYTITLE">mrouted</span>(8)</span>的手册里找到。</p></div></div><div class="NAVFOOTER"><hr align="LEFT" width="100%" /><table summary="Footer navigation table" width="100%" border="0" cellpadding="0"cellspacing="0"><tr><td width="33%" align="left" valign="top"><a href="advanced-networking.html"accesskey="P">后退</a></td><td width="34%" align="center" valign="top"><a href="index.html"accesskey="H">起点</a></td><td width="33%" align="right" valign="top"><a href="network-wireless.html"accesskey="N">前进</a></td></tr><tr><td width="33%" align="left" valign="top">高级网络</td><td width="34%" align="center" valign="top"><a href="advanced-networking.html"accesskey="U">上一级</a></td><td width="33%" align="right" valign="top">无线网络</td></tr></table></div></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -