我第一次尝试设置 Linux 路由器,但设置时遇到了困难。
这里我想要设置它的方式是:ISP 线路 -> Linux 路由器 -> Linksys 路由器 -> Lan。
Linux 路由器有 eth0 和 eth1
我该如何设置它以及将我的外部 IP 放在哪里?
非常感谢,
答案1
由于家里就有这样的装置,所以我想我知道该怎么做。
您的 Linux 路由器将有两个物理接口。我将它们称为eth0
(连接到您的内部网络并使用静态 IP 地址)和eth1
(连接到您的 ISP,并且可能使用通过 DHCP 提供的地址)。
开启数据包转发
在文件中/etc/sysctl.conf
,可能有两行与以下内容匹配:
# Controls IP packet forwarding
net.ipv4.ip_forward = 0
如果没有,您至少需要添加最后一行。这是重要的部分:将 0 改为 1。如果 Linux 路由器上的路由表告诉内核下一步要执行的操作,则它会告诉内核将数据包从一个接口发送到另一个接口。然后,您需要重新启动,或者运行以下命令:echo 1 > /proc/sys/net/ipv4/ip_forward
。
设置 NAT
目前,从 eth0 或 eth1 发出的所有数据包都使用与输入相同的 IP 地址。因此,Google 将从 192.168.1.x(或任何您的 IP 方案)获取 ping。问题在于,这些 IP 地址无法通过公共互联网路由。因此,您必须告诉您的 Linux 路由器修改传出数据包,以便将它们路由回您。我使用以下规则进行了修改:
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
这告诉系统,在完成所有路由后(因为它在 POSTROUTING iptables 链中),如果传出接口是 eth1(“-o eth1”),则应用目标 MASQUERADE。这意味着“将源 IP 地址更改为接口的 IP 地址。
设置 DHCP
此时,您的系统正在执行基本操作。但是,您必须设置每个连接的系统,使其具有静态 IP 并指向外部 DNS 服务器。这可以通过名为 的软件包进行更改dhcp
。安装它,并将其设置为在启动时启动。在我的基于 Red Hat 的系统上,这可以通过两个命令完成:yum install dhcp
和chkconfig dhcpd on
。但是,它不会执行任何操作,因为您尚未配置 DHCP 以了解您的 IP 方案是什么以及它应该侦听哪些接口。(虽然我可能错了)。下面是您的配置/etc/dhcpd.conf
可能的样子:
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.sample
#
ddns-update-style interim;
#include "/var/named/chroot/etc/rndc.key";
subnet 192.168.1.0 netmask 255.255.255.0
{
authoritative;
range 192.168.1.10 192.168.1.100;
option routers 192.168.1.1;
option domain-name-servers 192.168.1.1;
}
max-lease-time 14400; #4 hours
default-lease-time 14400; #4 hours
这里有几个关键点:
- 子网行:这必须是 eth0 的网络地址。网络掩码也必须匹配。
- 范围行:这是您设置内部网络的起始和终止地址的地方。我会强烈建议排除Linux路由器本身的地址。
- 选项路由器行:在这里您可以告诉客户端其默认网关是什么。在您描述的情况下,这将是 Linux 路由器的 eth0 的 IP 地址。
- 选项域名服务器行:在这里您可以告诉客户端他们的 DNS 服务器是什么。
option domain-name-servers 208.67.222.222 208.67.220.220
如果您想使用 OpenDNS、option domain-name-servers 8.8.8.8 8.8.4.4
如果您想使用 Google Public DNS,或者option domain-name-servers 192.168.1.1
如果您想设置系统来处理所有这些,您可以这样做。
现在,您可以以 root 身份启动它(在基于 Red Hat 的系统上)service dhcpd start
。如果您没有使用 Red Hat 或衍生产品,则需要运行该系统的启动脚本。
租约时间以秒为单位定义。至少根据我能找到的文档,有时客户端会要求特定的租约期限,在这种情况下,将检查 max-lease-time 和 min-lease-time 语句并进行调整以适应这些界限。其他时候,客户端不会要求租约期限,在这种情况下将使用 default-lease-time。
就不为您的 ISP 的其他客户端提供内部网络 DHCP 而言,这是安全的,因为如果 DHCPD 不知道它所接入的接口的 IP 方案,它将不会提供地址。因此,如果 dhcp 请求来自 IP 为 123.45.67.89 的 eth1,则 DHCP 设置没有该 IP 的子网块。因此它不会为该请求发送任何 DHCP 提供。但如果它来自 IP 为 192.168.1.1 的 eth0,它确实有一个与该地址匹配的子网块,并且它确实提供 DHCP。
设置 DNS
这个可能是最简单的了。在我的 RHEL 5.1 系统上,它只是安装、启动并指向客户端。开箱即用,它配置为指向根名称服务器并在 DNS 启动时处于活动状态的任何接口上为客户端提供服务。
要安装,请记住它不是 dnsd,而是 named。它不是 naming 的过去式。相反,应将其读作“name-D”。
yum install named #installation
service named start #start it for right now
chkconfig named on #set it to start at system boot.
答案2
您可能需要考虑设置基于 Linux 的路由器发行版,例如 Smoothwall (http://www.smoothwall.org)。它是专为路由器使用而设计的,设置起来比自己设置要容易得多。