家庭路由器

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Home router and the translation is 100% complete.
Other languages:

本文档详细说明如何将旧的Gentoo机器变成路由器以将家庭网络连接到互联网。

介绍

与购买由大公司(Linksys、D-Link、Netgear 等)制造的预制路由器相比,使用旧备件构建个人路由器具有许多优势。迄今为止最大的优势是对连接的控制。其他优点可以留给用户想象;在这种情况下几乎可以做任何事情,这只是一个需求的问题。

这份指南将说明如何在自定义路由器(内核和iptables)上设置网络地址转换(NAT),添加并配置常见服务(通过net-dns/dnsmasq的域名系统(DNS),通过net-misc/dhcpcd的DHCP,通过net-dialup/ppp的ADSL),并最终介绍一些自定义路由器能够实现的复杂且有趣的功能(端口转发、流量整形、代理/缓存等)。

在开始之前,请查看基本要求列表:

  1. 至少安装了 2 个网络接口卡 (NIC) 的计算机。
  2. Internet 连接的配置设置(可能包括 IP/DNS/网关/用户名/密码等)。
  3. (可选)支持主模式的 Wi-Fi 卡。建议使用主模式以避免具有旁路功能的 NIC,因为某些 NIC 需要专有驱动程序。如果无法访问专有驱动程序,该卡将永久保持旁路模式并且无法使用。
  4. 一点空闲时间和对 Gentoo 的热爱,以便成功地遵循本指南并实现一个功能良好的家庭路由器。

本指南中使用的约定包括:

  • eth0 - 连接到局域网 (LAN) 的 NIC 或由多个 NIC 组成的网桥
  • eth1 - 连接到广域网 (WAN) 的 NIC
  • LAN 使用私有 192.168.0.xxx 网络
  • 路由器硬编码为标准的 192.168.0.1 IP 地址
重要
出于安全预防措施,强烈建议关闭路由器上所有不需要的服务直到防火墙启动。要查看当前运行的服务,请运行 rc-status

内核设置(先了解你自己)

内核需要为系统上存在的两个 NIC 安装驱动程序。要查看网卡是否已设置,请使用 ip link 命令。输出可能与以下示例略有不同。重要的是接口都要出现。

root #ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 00:60:F5:07:07:B8 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 00:60:F5:07:07:B9 brd ff:ff:ff:ff:ff:ff

如果只看到了两张网卡中的一张(或者一张也没有),请尝试运行lspci | grep Ethernet

附注
lspci 实用程序是 sys-apps/pciutils 包的一部分。

一旦获取了网卡(NIC)的制造商和型号,就需要配置内核以支持正确的驱动程序。有关内核配置的更多信息,请参阅Kernel/Gentoo 内核配置指南

接下来需要支持IP表和NAT(如果需要,还包括数据包整形)。以下列表将功能分为必需(*)、仅在通过PPPoE使用ADSL时需要(a)、建议所有人使用(x)以及仅用于整形器(s)的功能。只要在需要功能时能够加载正确的模块,这些功能是内置于内核中还是作为模块都无关紧要。有关加载模块的更多信息,请参阅内核模块指南

内核 开启必要的网络选项
-*- Networking support  --->
   Networking options  --->
      [*] TCP/IP networking
         [*] IP: advanced router
      [*] Network packet filtering framework (Netfilter)  --->
         [*]   Advanced netfilter configuration
            IPv6: Netfilter Configuration  ---> 
               <*> IPv6 connection tracking support
               <*> IP6 tables support (required for filtering)

那些更愿意在menuconfig中直接搜索这些功能的人可以按以下名称找到它们: CONFIG_INETCONFIG_IP_ADVANCED_ROUTER,和 CONFIG_NETFILTERCONFIG_NETFILTER_ADVANCEDCONFIG_NF_CONNTRACK_IPV6,和 CONFIG_IP6_NF_IPTABLES

附注
在新版本内核的menuconfig界面中,某些内容可能略有不同,例如,CONFIG_NF_CONNTRACK_IPV6在5.10版本的内核中不存在,现已合并到CONFIG_NF_CONNTRACK中,适用于IPV6和IPV4(位于“核心Netfilter配置”标签页中)!

使用 2.4.x 内核时,必须为 DHCP 启用以下功能:

内核 网络选项
[*] Socket Filtering
  
   IP: Netfilter Configuration  --->
      [*] Connection tracking (required for masq/NAT)
         [x] FTP protocol support
         [x] IRC protocol support
      [*] IP tables support (required for filtering/masq/NAT)
         [*] IP range match support
         [x] MAC address match support
         [*] Multiple port match support
         [*] Packet filtering
            [*] REJECT target support
            [x] REDIRECT target support
         [*] Full NAT
            [*] MASQUERADE target support
         [s] Packet mangling
            [s] MARK target support
         [x] LOG target support
  
   QoS and/or fair queueing  --->
      [s] QoS and/or fair queueing
         [s] HTB packet scheduler
         [s] Ingress Qdisc
  
   [a] PPP (point-to-point protocol) support
      [a] PPP filtering
      [a] PPP support for async serial ports
      [a] PPP support for sync tty ports
      [a] PPP Deflate compression
      [a] PPP BSD-Compress compression
      [a] PPP over Ethernet
附注
在menuconfig界面中,对于较新的内核版本,某些内容可能略有不同。然而这些不会太难找到。祝好运!

拥抱WAN (又名互联网)

简介

连接到互联网的方法有很多种,但大多数公众通常只使用几种方法。 ADSL (PPPoE) 和电缆调制解调器(静态/动态)是 ISP(互联网服务提供商)提供的两种最常见的方法。如果还有其他可用的方法,请随时将它们添加到这篇 wiki 文章中。你可以直接跳过本章中和你的实际需求不服的内容。本章讨论如何通过 eth1 将路由器连接到互联网。

ADSL 和 PPPoE

过去由rp-pppoe(Roaring Penguin)提供的所有高级PPPoE软件已经集成到标准ppp包中。只需使用emerge ppp命令来安装PPPoE。还记得上面提到的用户名和密码信息是必需的吗?在你喜欢的文本编辑器中打开/etc/conf.d/net,并相应地进行配置。

用你需要的用户名和密码替换掉例子中的<username><user_password>

文件 /etc/conf.d/net为ppp0使用eth1上的ADSL
config_ppp0="ppp"
link_ppp0="eth1"
plugins_ppp0="pppoe"
pppd_ppp0="
  defaultroute
  usepeerdns
"
username_ppp0="<username>"
password_ppp0="<user_password>"
root #ln -s net.lo /etc/init.d/net.ppp0
root #rc-update add net.ppp0 default
root #service net.ppp0 start
警告
当DSL启动时,它会在ifconfig命令的输出中增加一个“ppp0”条目。尽管网络接口卡被称为eth1,IP地址实际上绑定在ppp0上。从现在开始,用ppp0替换eth1
警告
请务必让/etc/conf.d/net文件只有“root”用户组的用户有权读写。这是因为拨号的用户名和密码直接以文本形式存储在其中。
警告
对于从net-dialup/rp-pppoe转来或遇到奇怪的连接重置问题的用户,请查阅下方“故障排除”中MTU一节。

有线电缆 和/或 动态/静态IP

如果需要静态 IP,则需要其他配置详细信息。静态用户 IP 的用户需要添加 IP 地址、网关地址和 DNS 服务器地址。

动态IP用户:

root #emerge --ask net-misc/dhcpcd
文件 /etc/conf.d/net动态 IP 地址
config_eth1="dhcp"

静态IP用户:

文件 /etc/conf.d/net静态 IP 地址配置
config_eth1="66.92.78.102/24"
routes_eth1="default via 66.92.78.1"
文件 /etc/resolv.conf添加DNS信息
nameserver 123.123.123.123

动态和静态设置:

root #ln -s net.lo /etc/init.d/net.eth1
root #rc-update add net.eth1 default
root #service net.eth1 start

完成上述更改后,系统应准备好继续。

拥抱局域网(带上一些朋友)

与前一步相比,这一步轻而易举。要使用两个以上的设备(多个用于 LAN 的设备和一个用于 WAN的设备),需要在使用 LAN 的所有 NIC 之间设置网桥。这将允许通过同一 IP 地址访问多个 NIC。

如果需要使用网桥,遵循建立网桥指南。在这篇文档中,将用网桥名称(默认为br0)来代替eth0。如果家庭路由器接入了大量网络设备,可以考虑用udev为其重命名,以方便管理。建立网桥和重命名设备完全是可选的,但是我们建议在所有大一点的家用网络里这样做。

创建 Wi-Fi 接入点时,请确保 Wi-Fi 卡支持主模式并设置 Hostapd

文件 /etc/conf.d/net
config_eth0="192.168.0.1/24"
root #rc-update add net.eth0 default
root #service net.eth0 start

LAN 服务(因为我们是好人)

DHCP 服务器

如果家里的每个人只要把插上网线就可以上网,那简直太好了。不用记住又臭又长的细节或者盯着枯燥无味的配置,生活就变得很美好,不是吗?这部分介绍动态主机配置协议(DHCP)和为什么每个人都应该注意。

DHCP顾名思义:一种允许自动动态配置主机的协议。在路由器上运行DHCP服务器,向其提供有关网络的所有信息(有效的IP,DNS服务器,网关等),然后当其他主机启动时,它们可以运行DHCP客户端,并且自动配置自己。不要大惊小怪!有关DHCP的更多信息,请访问维基百科的DHCP条目

本节将用到net-dns/dnsmasq软件包,该软件包可以提供DHCP和DNS服务。现在,让我们来专注于DHCP。注意:要运行不同的DHCP服务器,可以在下面的“有趣的事情”部分找到另一个示例。此外,要修改 DHCP 服务器设置,请阅读/etc/dnsmasq.conf文件中的注释。

root #emerge --ask net-dns/dnsmasq
文件 /etc/dnsmasq.conf
dhcp-range=eth0,192.168.0.100,192.168.0.250,72h
interface=eth0
root #rc-update add dnsmasq default
root #service dnsmasq start

设置接口(interface)非常重要。使用默认的 dnsmasq 设置将使路由器容易遭受 DNS 放大攻击,这可能会从提供连接的 ISP 发送一些可怕的电子邮件。使用[1]检查以确保路由器不允许 DNS 放大攻击。

现在这台小路由器是一个真正的DHCP服务器了。插入那些计算机并观察它们的运行!在Windows系统中,导航到TCP/IP属性,选择自动获取IP地址自动获取DNS服务器地址选项。有时候更改不是立即生效的,因此可能需要打开命令提示符并运行ipconfig /releaseipconfig /renew命令。关于Windows的内容就到此为止,现在让我们回到每个人最喜欢的企鹅(Linux)!

DNS服务

当人们想访问互联网上的一个地方时,他们会记住名字,而不是一串“时髦”的数字。毕竟,什么更容易记住,eBay.com 还是 66.135.192.87?这就是DNS的用武之地。DNS服务器在互联网上运行,每当有人想访问eBay.com时,这些服务器都会将文本“eBay.com”(我们看到的)转换为IP地址“66.135.192.87”(计算机需要的)。有关DNS的更多信息,请访问维基百科

由于 dnsmasq 用于 DHCP 服务器,并且它包括一个 DNS 服务器,因此这里没有什么可做的了!小路由器已经为其DHCP客户端提供DNS。难道一切都不应该这么简单吗?;)

如果设置起来更方便,可以选择其他DNS服务器。本文中使用了DNSMASQ,因为它的设计完全符合本指南的要求。它是本地网络的小型DNS缓存/转发服务器。本操作指南的范围不是为域(domain)提供DNS;但它确实为家庭LAN的每个用户提供了简单的DNS服务。

NAT(又名IP伪装)

此时,人们可以通过网络相互交谈并通过DNS查找主机名,但他们仍然无法实际连接到Internet。虽然网络管理员(阅读本文的人)可能认为它很棒(管理员的带宽更大!),但如果没有互联网连接,其他用户可能不是很满意。

这就是网络地址转换(NAT)的用武之地。NAT是一种在有少量公共 IP 地址可用时将专用 LAN 中的多台计算机连接到Internet的方法。通常,ISP 会为家庭互联网用户提供1个公共IP地址,以便整个家庭连接到互联网。NAT的魔力使这成为可能。有关NAT的更多信息,请访问维基百科

附注
在开始之前,请确保系统上已安装 IPtables。如果未安装,请:emerge iptables

在安装IPtables后,刷新当前规则:

root #iptables -F
root #iptables -t nat -F

设置默认策略以处理不匹配的流量:

root #iptables -P INPUT ACCEPT
root #iptables -P OUTPUT ACCEPT
root #iptables -P FORWARD DROP

复制并粘贴以下内容:

root #export LAN=eth0
root #export WAN=eth1

下一步锁定服务,使它们只能在 LAN 中工作:

root #iptables -I INPUT 1 -i ${LAN} -j ACCEPT
root #iptables -I INPUT 1 -i lo -j ACCEPT
root #iptables -A INPUT -p UDP --dport bootps ! -i ${LAN} -j REJECT
root #iptables -A INPUT -p UDP --dport domain ! -i ${LAN} -j REJECT

(可选)允许从 WAN 访问 ssh 服务器:

root #iptables -A INPUT -p TCP --dport ssh -i ${WAN} -j ACCEPT

将 TCP / UDP 数据包丢弃到特权端口:

root #iptables -A INPUT -p TCP ! -i ${LAN} -d 0/0 --dport 0:1023 -j DROP
root #iptables -A INPUT -p UDP ! -i ${LAN} -d 0/0 --dport 0:1023 -j DROP

最后添加NAT规则:

root #iptables -I FORWARD -i ${LAN} -d 192.168.0.0/16 -j DROP
root #iptables -A FORWARD -i ${LAN} -s 192.168.0.0/16 -j ACCEPT
root #iptables -A FORWARD -i ${WAN} -d 192.168.0.0/16 -j ACCEPT
root #iptables -t nat -A POSTROUTING -o ${WAN} -j MASQUERADE

通知内核 IP 转发正常:

root #echo 1 > /proc/sys/net/ipv4/ip_forward
root #for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done

指示 IPtables 守护进程保存对规则的更改,然后将 IPtables 添加到默认运行级别:

root #/etc/init.d/iptables save
root #rc-update add iptables default
文件 /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1

对于动态 Internet,应启用以下设置:

文件 /etc/sysctl.conf
net.ipv4.ip_dynaddr = 1

输入上述文本后,其他网络用户现在应该可以像自己直接连接一样使用 Internet。

ip_dynaddr选项对于按需拨号系统或 ISP 提供动态地址时非常有用。这适用于在完全设置 Internet 接口之前尝试连接的问题。这为路由器后的用户提供了更流畅的网络体验。

有趣的事情(以防雨天)

介绍

信不信由你,它已经完成了!从现在开始,将涵盖一些你可能感兴趣的其他常见主题。以下部分内容都是完全可选的。

端口转发

有时,用户需要能够在路由器面的计算机上托管服务,或者需要能够远程连接到路由器后面的计算机。也许路由器后面的一台或多台机器上需要 FTP、HTTP、SSH 或 VNC 服务器,而外部人员需要连接到它们。端口转发的唯一限制是每个端口只能建立一个服务/机器组合。例如,没有实用的方法可以在路由器后面设置三个FTP服务器,并全部通过端口21连接到它们;只有一个系统可以位于端口21上,而其他系统需要位于其他端口上(端口123和端口567是不错的选择)。

所有端口转发规则的格式为 iptables -t nat -A PREROUTING -p [协议] --dport [路由器上的外部端口] -i ${WAN} -j DNAT --to [转发到的ip/端口]。不幸的是,iptables在端口转发时不接受主机名。将外部端口转发到内部计算机上的同一端口时,请省略目标端口。有关更多信息,请参见iptables(8)手册页。

root #export LAN=eth0
root #export WAN=eth1

将端口 2 转发到内部主机上的 ssh:

root #iptables -t nat -A PREROUTING -p tcp --dport 2 -i ${WAN} -j DNAT --to 192.168.0.2:22

FTP 转发到内部主机:

root #iptables -t nat -A PREROUTING -p tcp --dport 21 -i ${WAN} -j DNAT --to 192.168.0.56

HTTP 转发到内部主机:

root #iptables -t nat -A PREROUTING -p tcp --dport 80 -i ${WAN} -j DNAT --to 192.168.0.56

内部主机的 VNC 转发:

root #iptables -t nat -I PREROUTING -p tcp --dport 5900 -i ${WAN} -j DNAT --to 192.168.0.2
root #iptables -t nat -I PREROUTING -p tcp --dport 5901 -i ${WAN} -j DNAT --to 192.168.0.3:5900
附注
默认情况下,VNC 客户端连接到端口 5900。如果需要选择其他端口,大多数VNC客户端会使用连接地址的后缀,该地址将添加到5900以查找最终端口。因此,在上述情况下,要将VNC添加到 192.168.0.3,请将 :1 添加到目标IP地址(即路由器的WAN地址),以便VNC客户端连接到端口5901。

SAMBA 转发到内部主机(覆盖 Windows 的多余端口):

root #iptables -t nat -I PREROUTING -p tcp --dport 135 -i ${WAN} -j DNAT --to 192.168.0.2
root #iptables -t nat -I PREROUTING -p tcp --dport 139 -i ${WAN} -j DNAT --to 192.168.0.2
root #iptables -t nat -I PREROUTING -p tcp --dport 445 -i ${WAN} -j DNAT --to 192.168.0.2
root #iptables -t nat -I PREROUTING -p udp --dport 137:138 -i ${WAN} -j DNAT --to 192.168.0.2
root #iptables -t nat -I PREROUTING -p udp --dport 445 -i ${WAN} -j DNAT --to 192.168.0.2

Bittorrent 转发:

root #iptables -t nat -A PREROUTING -p tcp --dport 6881:6889 -i ${WAN} -j DNAT --to 192.168.0.2

eDonkey/eMule 转发:

root #iptables -t nat -A PREROUTING -p tcp --dport 4662 -i ${WAN} -j DNAT --to 192.168.0.55

Cube Warp Pipe 支持:

root #iptables -t nat -A PREROUTING -p udp --dport 4000 -i ${WAN} -j DNAT --to 192.168.0.56

Playstation 2 在线支持:

root #iptables -t nat -A PREROUTING -p tcp --dport 10070:10080 -i ${WAN} -j DNAT --to 192.168.0.11
root #iptables -t nat -A PREROUTING -p udp --dport 10070:10080 -i ${WAN} -j DNAT --to 192.168.0.11

Xbox Live:

root #iptables -t nat -A PREROUTING -p tcp --dport 3074 -i ${WAN} -j DNAT --to 192.168.0.69
root #iptables -t nat -A PREROUTING -p udp --dport 3074 -i ${WAN} -j DNAT --to 192.168.0.69
root #iptables -t nat -A PREROUTING -p udp --dport 88 -i ${WAN} -j DNAT --to 192.168.0.69

Identd (用于 IRC)

Internet Relay Chat大量使用ident服务。现在 IRC 客户端位于路由器后,因此需要一种方法来托管路由器和客户端的标识。为此,我们创建了一个服务器。它叫 net-misc/midentd

root #emerge --ask net-misc/midentd
root #rc-update add midentd default
root #service midentd start

Portage 树中还有一些其他身份的服务器。其他可行的选项是 net-misc/oidentdnet-misc/fakeidentd

时间服务器

保持系统时间的正确对于维护系统健康至关重要。其中最常用的方式,是使用网络时间协议(NTP)net-misc/ntp软件包(该软件包提供服务端和客户端的实现)。

许多用户在其计算机上运行 ntp 客户端。显然,世界上的客户端越多,ntp 服务器需要承担的负载就越大。在家庭网络等环境中,可以在本地设置 NTP 服务器,以帮助降低公共服务器的负载,同时仍为本地系统提供适当的时间。作为额外的奖励,本地客户的私人更新速度会快得多!设置很简单:在路由器上运行NTP服务器,该服务器与公共Internet服务器同步,同时为网络中的其余计算机提供时间。首先,只需在路由器上emerge ntp,然后根据需要编辑/etc/conf.d/ntp-client

root #rc-update add ntp-client default
文件 /etc/ntp.conf
restrict default ignore
restrict 192.168.0.0 mask 255.255.255.0 notrust nomodify notrap

这样只有 192.168.0.xxx 区段的 NTP 客户端可以使用 NTP 服务器。

root #rc-update add ntpd default
root #service ntpd start
附注
设置服务器时,请确保允许NTP端口(123/udp)上的入站和出站通信。客户端只需要通过UDP在123端口进行出站访问。

现在,在客户端上运行emerge ntp。通过运NTP客户端的设置简单很多。

/etc/conf.d/ntp-client 中,将 NTPCLIENT_OPTS 变量中的 pool.ntp.org 服务器更改为 192.168.0.1

root #rc-update add ntp-client default
root #service ntp-client start

Rsync同步服务器

对于希望在同一个局域网上运行多个gentoo设备的人,明智的做法是不要让每个设备都从远程服务器emerge --sync。设置本地rsync可以节省个人和Gentoo rsync服务器的带宽。这个过程是相对简单的。

附注
如果你想更加深入的了解rsync,请参阅rsync官方指南.

Gentoo本身依赖于rsync,因此不需要通过emerge安装。编辑默认的/etc/rsyncd.conf配置文件,取消对 [gentoo-portage]部分的注释,并确保添加address选项。所有其他默认值都应已正确设置。

文件 /etc/rsyncd.conf
pid file = /var/run/rsyncd.pid
use chroot = yes
read only = yes
address = 192.168.0.1
  
[gentoo-portage]
  path = /mnt/space/portage
  comment = Gentoo Linux Repository
  exclude = /distfiles /packages

然后需要启动该服务(同样,默认值是可以的)。

root #service rsyncd start
root #rc-update add rsyncd default

最后你只需要告诉客户端直接从路由器同步。编辑/etc/portage/repos.conf/gentoo.conf配置文件。如果此文件不存在,请在/etc/portage下创建一个名为repos.conf的目录,并将/usr/share/portage/config/repos.conf文件复制到此目录中。然后相应地更新此文件——不要忘记设置sync-uri以匹配服务器(家庭路由器)的地址。

文件 /etc/portage/repos.conf/gentoo.conf为客户端设置新的rsync服务器
[DEFAULT]
main-repo = gentoo
 
[gentoo]
location = /var/db/repos/gentoo
sync-type = rsync
sync-uri = rsync://192.168.0.1/gentoo-portage
auto-sync = yes

邮件服务器

有时,在路由器上运行简单邮件传输协议(SMTP)服务器是很好的选择。每个用户可能都有自己想要这样做的原因,但是在路由器上运行SMTP的一个优点是用户看到邮件是立即发送的,并且重试/路由的工作留给邮件服务器。某些ISP不允许对不属于其网络的帐户(如 Verizon)进行邮件中继。此外,我们可能需要限制一部分邮件,以免大型附件严重占用网络资源,影响上网体验。

root #emerge --ask mail-mta/netqmail

确保 hostname 命令的输出正确:

root #emerge --config netqmail
root #iptables -I INPUT -p tcp --dport smtp ! -i ${LAN} -j REJECT
root #ln -s /var/qmail/supervise/qmail-send /service/qmail-send
root #ln -s /var/qmail/supervise/qmail-smtpd /service/qmail-smtpd
root #cd /etc/tcprules.d

编辑 tcp.qmail-smtp 并在允许部分添加如下条目:

文件 niltcp.qmail-smtp
192.168.0.:allow,RELAYCLIENT=""
root #make
root #rc-update add svscan default
root #service svscan start

在网络中的主机上设置电子邮件时,请告诉他们SMTP服务器是192.168.0.1。访问netqmail 主页以获取有关 netqmail 用法的更多文档。

完整的 DHCP 服务器

上文dnsmasq用于向所有DHCP客户端提供DHCP服务。对于大多数使用简单小型局域网的人来说,这是已经够用了。但有时我们会有更多需求。因此,ISC 人员为需要完整功能的用户提供了功能完备DHCP服务器。

root #emerge --ask net-misc/dhcp
文件 /etc/dhcp/dhcpd.conf这是一个简单的配置文件
authoritative;
ddns-update-style interim;
subnet 192.168.0.0 netmask 255.255.255.0 {
    pool {
        range 192.168.0.100 192.168.0.250;
        default-lease-time 259200;
        max-lease-time 518400;
        option subnet-mask 255.255.255.0;
        option broadcast-address 192.168.0.255;
        option routers 192.168.0.1;
        option domain-name-servers 192.168.0.1;
    }
}

/etc/conf.d/dhcpd 中,将 IFACE 设置为“eth0”。

root #rc-update add dhcpd default
root #service dhcpd start

这是足以代替之前使用的dnsmasq DHCP所需的最小设置。dnsmasq中的DHCP功能应该被禁用吗?如果没有,请注释掉/etc/dnsmasq.conf中的dhcp-range设置并重新启动服务。

连接另一个局域网(或两个或三个)

有时路由器必须连接到另一个LAN。这样做可以暂时连接一组朋友或将不同的计算机组分开。无论出于何种原因,将路由器扩展到其他LAN网络都应该很简单。在以下示例中,本文假定“新”网络通过第三张以太网卡(即 eth2)连接。

首先配置端口。按照这一部分的指导并把config_eth0="192.168.0.1/24"改为config_eth2="192.168.1.1/24"

调整dnsmasq以用于新的接口。再次编辑/etc/conf.d/dnsmasq文件,在DNSMASQ_OPTS加入-i eth2;多次使用-i不会引发问题。然后编辑/etc/dnsmasq.conf并在这一部分加入与dhcp-range类似的一行,把dhcp-range=eth0,192.168.0.100,192.168.0.250,72h改为dhcp-range=eth2,192.168.1.100,192.168.1.250,72h,然后把interface=eth0改为interface=eth2。有多行dhcp-range和interface不会引发问题。

最后,请参阅这一部分中的规则,并复制其中包含-i ${LAN}的规则。可能需要创建另一个变量,比如LAN2,以使事情变得更容易。

故障排除

有用的工具

当无法让计算机进行通信时,请尝试以下工具(它们都可以在 Portage 的 net-analyzer 类别中找到):

功能 描述
net-analyzer/wireshark 利用过滤器查看所有网络原始数据的GUI工具
net-analyzer/tcpdump 利用过滤器保存网络原始数据的命令行工具
net-analyzer/iptraf-ng 基于ncurses的IP LAN监视器
net-analyzer/ettercap 基于ncurses的网络监视器/控制器

DHCP 无法启动

首次启动 dhcp init.d 脚本时,它可能无法加载,但忽略了提供任何有用的信息。

root #service dhcp start
 * Setting ownership on dhcp.leases ...          [ ok ]
 * Starting dhcpd ...                            [ !! ]

该技巧用于了解dhcpd将其输出保存在何处。浏览到/var/log并读取日志文件。由于具体的日志文件取决于使用syslog的包,因此请尝试运行grep -Rl dhcpd /var/log以缩小范围。配置文件中可能有错别字。另一个尝试运行的命令:dhcpd -d -f(debug / foreground 的缩写)。这有助于根据输出调试错误。

不正确的 MTU 值

如果遇到奇怪的错误(例如无法访问某些网页,而其他网页加载正常),则可能是“路径MTU发现”(Path MTU Discovery)问题。对此进行测试的快速方法是运行以下iptables命令:

root #iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

这将影响所有新连接;刷新有问题的网站以测试修复程序。如果有帮助,100mbit以太网连接的标准MTU值为1500;此值也适用于PPPoA。对于PPPoE连接,应为1492。有关详细信息,请阅读Linux Advanced Routing & Traffic Control HOWTO的第15章。

如果上述命令不起作用,请考虑将规则放入 mangle 表中。只需将-t mangle添加到命令中即可。

无法直接连接两台机器

如果(无论出于何种原因)需要在没有集线器或交换机的情况下将两台计算机直接连接在一起,则常规以太网电缆可能无法正常工作,除非使用自动MDI/MDI-X(也称为“自动感应”)功能的网络适配器。直接NIC到NIC连接需要另一根称为交叉电缆的电缆。这个Wikipedia 页面解释了低层次的细节。

最后的注释

没有其他最后的注释。如果在本指南中遇到任何问题,请使用正确的信息更新本文的英文原文(中文版本请在原文修改后补充翻译),或者在英文原文的讨论页上留下简短的消息,并给出不可用的内容。最终,应该有人能够纠正任何问题。也可以在Gentoo的Bug跟踪网站上提交错误。如果还有其他有趣的内容可以增强本指南,请务必添加到英文原文!最坏的可能仅仅是被移除。


This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Mike Frysinger (vapier)
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.