设置 Linux 网关
如今,网络极其普遍——您可以在企业、学校,甚至是家庭中看到它们。网络之所以流行,是因为它允许用户共享资源。您可以在网络中共享文件、打印机和无数其他设备。那么,如果您可以共享 Internet 连接,那不是很好吗?使用 Linux,您可以做到。
将 Linux 设置为 Internet 网关并不难。Linux 网关允许多台计算机同时使用 Internet。这样做时,只有网关的 IP 地址在 Internet 上可见。其余计算机将“隐藏”在网关后面。这称为 IP 伪装。
您可以使用此设置做什么?嗯,如果您有四台计算机连接到网关,您可以同时从这四台计算机中的任何一台上网。您可以运行 telnet 会话、访问 IRC(Internet 中继聊天)、阅读新闻组等——您几乎可以在 Internet 上做的任何事情都可以完成。当然,有些事情可能需要您注意,我将讨论这些事情,以及设置 Linux 和 Windows 机器以使用网关。
首先,您需要一个可用的 TCP/IP 网络。我假设您的网络已启动并正在运行,并且您的所有机器都能够“看到”彼此。
我将讨论使用 Linux 内核 2.2.x 和 ipchains 1.3.x 设置 IP 伪装。如果由于某种原因您正在运行早期内核(例如 1.x.x),请参阅 Chris Kostick 在《Linux Journal》第 27 期和第 43 期中关于 IP 伪装的文章。
另外,请确保您拥有 Linux IP Masquerade mini HOWTO 的副本 (http://ipmasq.cjb.net/),作者是 Ambrose Au 和 David Ranch。它包含有关设置 IP 伪装的更详细信息,包括设置 Macintosh 和 Windows NT 客户端。如果您遇到问题,它还包含有用的 FAQ。本文基于该 mini HOWTO 以及个人经验。
我还假设您熟悉基本的 Linux 系统管理,并且您知道如何重新编译内核和修改您的 init 脚本。
接下来要弄清楚的是您想做什么。网络上有多少台机器?您希望将哪台机器设置为网关?哪些机器将是客户端?每台机器运行什么操作系统?这些问题的答案可能很复杂且独特,因此,为了本文的目的,我们将使用图 1 所示的设置。这是一个包含三个节点的网络,其中包含一个 Linux 网关 (antioch)、一个 Linux 客户端 (nazareth) 和一个 Windows 95 客户端 (lystra)。
让我们从设置网关开始,在我们的例子中是 antioch (192.168.0.1)。Antioch 运行 Linux 2.2.x,为了使其成为网关,我们需要启用某些内核选项。我的网关启用了表 1 中所示的内核选项。
在启动我们新编译的内核后,我们将不得不使用 insmod 或 modprobe 加载一些内核模块
/sbin/insmod ip_masq_user /sbin/insmod ip_masq_raudio /sbin/insmod ip_masq_ftp /sbin/insmod ip_masq_irc
明智的做法是将这些行添加到您的 init 脚本之一中,以便它们在每次启动时运行。还有其他与 IP 伪装相关的内核模块;要获取完整列表,请键入命令
/sbin/modprobe -l | grep ip_masqLinux 2.2 默认情况下不启用 IP 转发。要了解 IP 转发是否已开启,请检查文件 /proc/sys/net/ipv4/ip_forward 的内容。如果它是 0,则 IP 转发已关闭;如果是 1,则已开启。
# cat /proc/sys/net/ipv4/ip_forward 0 # echo "1" > /proc/sys/net/ipv4/ip_forward # cat /proc/sys/net/ipv4/ip_forward 1同样,明智的做法是将启用 IP 转发的行(带有 echo 命令的行)添加到您的 init 脚本之一中。
现在我们遇到了一个有趣的情况。我们如何知道谁可以使用网关,谁不能使用?这就是 ipchains 的用武之地。我当前的策略是拒绝所有人访问网关,除非明确允许。例如,假设我们只希望我们的客户端机器 nazareth 和 lystra 访问我们的网关,而不希望其他人访问。为了做到这一点,我们必须发出以下命令
ipchains -P forward DENY ipchains -A forward -s 192.168.0.2/255.255.255.0\ -j MASQ ipchains -A forward -s 192.168.0.3/255.255.255.0\ -j MASQ
另一方面,如果我们希望网络 192.168.0.* 上的每个人都使用网关,我们可以发出这些命令
ipchains -P forward DENY ipchains -A forward -s 192.168.0.0/255.255.255.0\ -j MASQ请注意,我们假设子网掩码为 255.255.255.0。如果您的子网掩码不同,只需相应地更改值即可。您可以使用 ipchains 做很多其他事情;但是,它们超出了本文的范围。我相信上面两个简单的例子将使您入门。(另请参阅 Pedro Bueno 的“使用 IP Chains 构建防火墙”,https://linuxjournal.cn/lj-issue/issue68/3622.html。)
就是这样!网关现在已启动并正在运行。记住将相关行添加到启动脚本中。还要记住在测试网关之前连接到 Internet。现在让我们设置客户端。
设置 Linux 客户端(nazareth,192.168.0.2)非常容易。您只需在 nazareth 上发出以下命令即可
route add default gw antioch
现在尝试 ping 一个外部站点(比如 www.ssc.com)以查看它是否响应
ping www.ssc.com如果它响应,那么您就成功了!如果它没有响应,请查看 mini-HOWTO 中包含的 FAQ,以获取常见问题的解决方案。
设置 Windows 客户端有点麻烦。以下是涉及的步骤
转到控制面板并双击网络。
找到代表您的网络接口卡的 TCP/IP 协议的图标。打开其属性。
单击网关选项卡。添加 192.168.0.1 作为网关。
单击 DNS 配置选项卡。在 DNS 服务器搜索顺序下,添加您的 ISP 的 DNS 服务器 IP 地址。
在所有对话框中按“确定”。
重启机器。
再次,通过访问外部站点(使用 ping 或您的 Web 浏览器或任何其他方式)来测试您的网关。如果一切顺利,您应该能够执行您通常在 Internet 上执行的大多数操作。
在设置 Linux 网关时,您应该注意一些事项。
首先,某些 Internet 应用程序可能无法与我们的设置良好配合。有关哪些应用程序有效和哪些应用程序无效的列表,请参阅最新版本的 IP Masquerade mini HOWTO。
一些应用程序可能需要您加载特定的内核模块。例如,在我们的例子中,我们已经加载了 ip_masq_raudio,它将处理任何 Real Audio 连接。如果您想运行 Quake、VDOLive 或 CUSeeMe,您将需要加载它们各自的内核模块。
要记住的另一件事是,如果您的网关未连接到 Internet,则 Linux 客户端机器上的应用程序可能无法正常工作。一个这样的应用程序可能是 sendmail。因此,如果您知道您的网关已离线,您可能需要从 Linux 客户端的路由表中删除网关的 IP 地址。要做到这一点,只需在 Linux 客户端机器上发出以下命令
route del default

Lawrence Teo (lawrenceteo@usa.net) 最近毕业于澳大利亚莫纳什大学,获得计算机学士学位。他自 1997 年以来一直使用 Linux,并从此爱上了它。他的其他兴趣包括安全、密码学、网站管理和软件开发。Lawrence 渴望有一天成为一名 UNIX 系统管理员。