自从我最近进行升级以来,我的网络设置一直有问题。它曾经可以工作,但现在 IP 流量没有像以前那样通过,但其他一切似乎都可以正常工作。我之前问过一个关于这个的问题,但现在我要问的是如何从头开始设置我的网络。我的网络如下所示:-
Client PCs |--------|
Windows-----| | |----------------|
Linux(1)---| Switch |-------------(2)| Server (18.04) |(3)-------Internet
Printer-----| | |----------------|
Other PCs----| |
|--------|
(1) 私网 Linux PC 的 ifconfig 输出:-
eth0 Link encap:Ethernet HWaddr 00:19:66:82:61:f7
inet addr:192.168.1.126 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:37 errors:0 dropped:0 overruns:0 frame:0
TX packets:82 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4829 (4.8 KB) TX bytes:8871 (8.8 KB)
Interrupt:23 Base address:0xa800
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:142 errors:0 dropped:0 overruns:0 frame:0
TX packets:142 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:10976 (10.9 KB) TX bytes:10976 (10.9 KB)
(2) 以太网 ID:enp5s0
(3) 以太网 ID:enp0s31f6
并且服务器上的 yaml netplan 文件是:-
network:
version: 2
renderer: NetworkManager
ethernets:
enp5s0:
dhcp4: no
dhcp6: no
addresses: [192.168.1.2/24]
nameservers:
addresses: [8.8.8.8,8.8.4.4]
enp0s31f6:
dhcp4: no
dhcp6: no
addresses: [192.168.0.5/24]
gateway4: 192.168.0.1
nameservers:
addresses: [8.8.8.8,8.8.4.4]
服务器还运行 dnsmasq,它提供似乎正常工作的 DHCP 和 DNS 服务,在客户端 PC 上按名称 ping 站点(例如“ping stackoverflow.com”)确实获得了 IP 地址,但随后无法执行实际操作平。
此外,“/proc/sys/net/ipv4/ip_forward”设置为“1”。
我错过了什么明显的东西吗?
如果您需要了解其他任何信息,请发表评论,我将使用信息更新问题。
您在这里缺少的是NAT 规则,因此系统知道如何将流量从网络内部路由到外部。但是,这里有一个问题:您向我们提供了网络接口,这两个接口都有私有 IPv4 地址。这使得处理 NAT 规则有点棘手。
但是,假设只有一个接口有网关 (
enp0s31f6
),我将在假设该接口是 Internet 连接接口的情况下进行操作。NAT 代表网络地址转换。如果您想了解更多关于 NAT 工作原理的信息,如果您想了解更多关于 NAT 工作原理的信息,可以参考 How Stuff Works (.com) 网站制作的不错的 NAT 外行指南。
NAT 行为的实际描述与回答这个问题无关,但基本上,它从私有 IP 空间(例如,源地址为 192.168.0.10)获取到 Internet 的数据包,并在重新广播之前翻译数据包到 Internet(通常),以便“源”地址看起来像路由器的公共 IP 地址。这个 NAT“会话”会被记住,直到该会话的连接终止,这意味着路由器也可以执行反向 NAT 规则,以便 Internet 的数据包正确地到达内部 IP 地址。(How Stuff Works 指南在解释 NAT 方面比这更好;这只是一个快速而肮脏的描述)
现在,让你的“路由器”工作。
您需要添加 NAT 规则,以便允许私有子网(on
enp5s0
) 冒充服务器访问 Internet。这被称为术语MASQUERADE
。iptables
这就是标准的现成路由器的工作方式,它们都使用 NAT 将私有 IPv4 地址转换为公共地址,以便与 Internet 进行无缝通信。这是您应该开始的命令:
让我分解一下,以便您了解该规则的实际作用。
sudo iptables
- 以超级用户身份执行iptables
命令。-t nat
- 调整系统上的 NAT 规则,而不是防火墙访问控制/过滤列表。-A POSTROUTING
- 添加到路由后 NAT 表。-s 192.168.1.0/24
- 匹配来自私有 IP 子网的流量...! -d 192.168.1.0/24
- ...其中目标IP地址不是子网的私有IP空间...-j MASQUERADE
- ...并通过主网络接口(在本例中为enp0s31f6
)重新传输此数据包,转换数据包的 IP 地址,使其看起来像是源自“路由器”/服务器,任何在私有 IP 空间之外看到数据包的东西.因此,从 192.168.1.10 到 IP 地址在 192.168.1.0-255 之外的服务器上的数据包在另一台服务器看来,该数据包来自 192.168.0.5(您的服务器),而不是起源192.168.1.10 的。但是,系统会记住这个转换,以便它可以接收发往 192.168.0.5 的响应数据包,并确保它们被正确寻址以返回到您的 192.168.1.10 地址。
但是,有一个问题:重新启动后将无法保存。
因此,您应该安装该
iptables-persistent
软件包,以便每次启动时都重新加载此 NAT 规则。**当它提示您保存当前的 IPv4 和 IPv6 规则时,您应该选择“是”。
此外,这种没有任何防火墙规则的“默认”虽然在理论上很好,但会使您的系统容易受到来自整个 Internet 的攻击
iptables
,您应该真正了解有关如何正确保护服务器的任何基本指南/路由器,使外界无法直接攻击服务器。但是,这超出了您最初问题的范围,如果您需要帮助更好地保护专用网络免受外部(“Internet”)的影响,那么您应该考虑将其作为自己的问题提出。