自从我最近升级以来,我的网络设置一直有问题。它以前可以正常工作,但现在 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 地址,但无法进行实际 ping。
此外,“/proc/sys/net/ipv4/ip_forward”设置为“1”。
我是否忽略了一些显而易见的事情?
如果您需要了解其他信息,请发表评论,我会使用相关信息更新问题。
答案1
你这里缺少的是NAT 规则因此系统知道如何将流量从网络内部路由到外部。但是,我们这里有一个问题:您已经为我们提供了网络接口,两者都有私有 IPv4 地址。这使得处理 NAT 规则变得有点棘手。
不过,假设只有一个接口具有网关(enp0s31f6
),我将假设该接口是互联网连接接口。
NAT 代表网络地址解读。如果你想了解更多关于 NAT 的工作原理,How Stuff Works (.com) 网站提供了一本不错的 NAT 入门指南如果您想进一步了解 NAT 的工作原理。
实际上描述NAT 的行为方式与回答这个问题不太相关,但基本上,它从私有 IP 空间(例如源地址为 192.168.0.10)获取发往互联网的数据包,并在重新广播到互联网之前转换数据包(通常),以便“源”地址看起来像路由器的公共 IP 地址。此 NAT“会话”将被记住,直到该会话的连接终止,这意味着路由器也可以执行反向 NAT 规则,以便互联网的数据包最终正确地到达内部 IP 地址。(《How Stuff Works》指南在解释 NAT 方面比这更好;这只是一个快速而粗略的描述)
现在,让您的“路由器”工作起来。
您需要添加 NAT 规则,以便私有子网(在 上enp5s0
)被允许冒充服务器进入互联网。这在术语MASQUERADE
中称为iptables
。这就是标准现成路由器的工作方式,它们都使用 NAT 将私有 IPv4 地址转换为公共地址,以便与互联网无缝通信。
您应该从以下命令开始:
sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 ! -d 192.168.1.0/24 -j MASQUERADE
让我分解一下,以便你能够理解这条规则实际上的作用。
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 规则。**
sudo apt install iptables-persistent
当它提示您保存当前的 IPv4 和 IPv6 规则时,您应该选择“是”。
此外,这种不设置任何防火墙规则的“默认”做法虽然在理论上很好,使你的系统容易受到来自整个互联网的攻击,您确实应该查阅一些iptables
关于如何正确保护服务器/路由器的基本指南,以便外部无法直接攻击服务器。但是,这超出了您最初问题的范围,如果您需要帮助更好地保护私有网络免受外部(“互联网”)的攻击,那么您应该考虑将其作为单独的问题提出。