“网关”用于连接多个网络。这个词常常用于表示本地网络通往外部 IP 地址的“出口”。网关充当路由器的身份,在它的多个网络接口间转发 IP 包,从而把它所连接的不同网络联系起来。
局域网路接在私人网址范围内 (不在网络网络的路由上),网关就需要 地址掩蔽 让其经由网络与外界沟通。掩蔽作业是网络层次的代理工作:内部机器,都被网关取代 (因为网关有外部的路由地址),借由掩蔽链接,数据送出出去,进来的数据经由掩蔽链接至内部机器。网关以指定的 TCP 端口运行此工作,通常是较高的号码 (超过 60000)。对外部而言,经由内部机器的链接,就是来自此等保留端口号。
网关有两种 网络地址转换 (英文缩写 NAT) 的功能。第一种是 目的 NAT (DNAT),改变封包目的 IP 地址 (与 TCP 或 UDP 端口)。链接追踪机制同时改变后续封包的链接。第二种 NAT 是 来源 NAT (SNAT),其中的 伪装 是特例之一;SNAT 改变出去链接的来源 IP 地址 (与 TCP 或 UDP 端口)。如同 DNAT,所有的封包由链接追踪机制处理。NAT 只用于 IPv4 及其限制的地址空间;在 IPv6 内,其宽广的地址技术允许直接在互联网路由 (并不表示可以近用内部机器,因为防火墙可以过滤流量) 减少 NAT 的用途。
理论讲多了,看看实务怎么做。system into a gateway is a simple matter of enabling the appropriate option in the Linux kernel, 经由 /proc/
虚拟文件系统,从 Linux 核心进入 Debian 系统的网关:
#
echo 1 > /proc/sys/net/ipv4/conf/default/forwarding
This option can also be automatically enabled on boot if /etc/sysctl.conf
or a configuration file in /etc/sysctl.d/
sets the net.ipv4.conf.default.forwarding
option to 1
.
例 10.1. /etc/sysctl.conf
文件
net.ipv4.conf.default.forwarding = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.tcp_syncookies = 1
在 IPv6 也能取得同样的效果,把手册中的 ipv4
换为 ipv6
,并使用 net.ipv6.conf.all.forwarding
于 /etc/sysctl.conf
文件内。
启用 IPv4 伪装就有点复杂,涉及配置 netfilter 防火墙。