我有两个子网,假设为 192.168.1.0/24 和 192.168.2.0/24,它们由一台带有两个接口卡(eth0 和 wlan0)的 Ubuntu 服务器连接。有很多描述使用 NAT,即主机隐藏在路由器后面。我想反过来 ping 两个子网中的主机。我需要如何配置 Ubuntu 服务器?
答案1
关于在哪里以及设置哪些路由的部分仍在进行中。这取决于网络拓扑。
首先,您必须确保路由器两侧的客户端确实使用路由器将数据包发送到另一侧网络。也就是说,您必须设置适当的路由。
根据网络的其余部分,可能有不同的方法来设置路由。
假设服务器的 IP 地址为 192.168.1.1 和192.168.2.1 eth0
。wlan0
- 只有两个本地网络。不将任一网络连接到互联网/第三个网络的附加路由器。您正在设置的服务器是执行路由的唯一设备。只需将服务器相应接口的 IP 设置为默认网关在客户端上。结果是,任何不是发往本地网络的包都将被转发到服务器,服务器再将其转发到另一个网络。
您有一个将其中一个网络连接到互联网的路由器。通常是您的 ISP 提供的路由器。我们假设它是 network1,并将路由器称为 netgw-1。在这种情况下,客户端将把 netgw-1 设置为其默认网关。如果netgw-1 有能力,最好的办法是在其路由表中添加一个条目,其要点如下
192.168.2.0/24 via 192.168.1.1
具体如何执行取决于设备。
这样,客户端就不需要额外的路由,但发往网络 2 的数据包将通过 netgw-1 发送到网络 2 的服务器。
不幸的是,这很可能无法实现,因为路由器不允许操纵其路由表。这让你只能选择在每个客户。
笔记:如何使路由持久取决于客户端的网络配置方法(例如 NetworkManager 或
/etc/interfaces
)。但为了测试的目的,在每个网络上都使用一个客户端并设置一条路由(在客户端上!)。
当前路线可通过 列出
ip route show
。sudo ip route add 192.168.2.0/24 via 192.168.1.1 dev eth0
这将设置到网络 192.168.2.0/24 的路由使用路由器192.168.1.1,通过接口发送数据包
eth0
。您必须根据客户端所在的网络以及网络接口的名称来调整命令。
之后,只需在服务器上启用 IPv4 转发即可。net.ipv4.ip_forward
启用该选项后,内核将通过服务器的网络接口转发 IP 包。
检查转发状态:sysctl net.ipv4.ip_forward
如果为 0,则通过以下方式启用转发
sudo sysctl -w net.ipv4.ip_forward=1
现在尝试通过路由器 ping 一下。如果一切顺利,并且您希望在重启时保留此设置,请打开/etc/sysctl.conf
并设置
net.ipv4.ip_forward=1
笔记您可能希望通过设置包过滤器iptables
来禁止某些流量,具体取决于您的安全需求。但这是另一个话题。
将机器设置为 NAT 路由器需要设置iptables
伪装流量,但正如您的问题所暗示的,您已经阅读了有关该主题的操作方法。