我很难弄清楚如何正确设置它。我几乎无法制定一个谷歌查询来解释它,所以我会尽力而为。
我有一台带有两个网卡的 Ubuntu PC。
eth0 (192.168.1.0) 连接到主默认网关并连接到互联网,而
eth1 (192.168.176.0) 连接到连接有一堆 IP 摄像头的网络交换机。
我已在路由器 PC 上启用 IP 转发、iptables 规则和主机。 eth1 网络内的主机可以访问互联网,也可以访问 eth0 网络上的其他主机。所以这很好。
我现在想做的是让 eth0 网络内的主机能够访问 eth1 网络内的主机。
计算机位于 eth0 网络上,但网络摄像机位于 eth1 网络上。一台带有两个 NIC 卡的计算机充当桥接器。最终我希望 eth0 上的计算机能够看到 eth1 上的 IP 摄像机。
尝试将其映射出来:192.168.1.1 上的主机应该能够看到 192.168.176.1 上的主机,但不能。
192.168.176.1 上的主机可以看到 192.168.1.1 上的主机(这些主机也可以访问互联网)。所以这里一切都好。
到目前为止,我已经有了这些 IP 规则,并且这些规则允许 eth1 网络出去。
iptables --table nat --append POSTROUTING --out-interface enp1s0 -j MASQUERADE
iptables --append FORWARD --in-interface enp3s0 -j ACCEPT
我想我的问题是:eth0 网络如何到达 eth1 网络中的主机?
我是否必须在想要访问 eth1 网络的各个计算机上添加路由?
我需要在路由器 PC 上的 eth0 和 eth1 接口之间设置转发吗?
这是我当前的添加路由命令、/etc/network/interfaces 和 iptables 规则:
(在 Mac 上:) 须藤路线-n添加-net 192.168.176.0/24 192.168.1.1(在有两个 NIC 的 PC 上) /etc/网络/接口 #主接口 enp3s0 自动enp1s0 iface enp1s0 inet 静态 地址192.168.1.12 网络掩码 255.255.255.0 网络192.168.1.0 网关192.168.1.1 dns 名称服务器 8.8.4.4 8.8.8.8
#辅助接口 enp3s0 自动enp3s0 iface enp3s0 inet 静态 地址 192.168.176.1 网络掩码 255.255.255.0 广播192.168.176.255 网络192.168.176.0
(在有两个 NIC 的 PC 上) iptables -t 过滤器 -A 转发 -i enp1s0 -o enp3s0 -j 接受 iptables -t 过滤器 -A 转发 -i enp3s0 -o enp1s0 -j 接受 iptables -t nat -A POSTROUTING -j MASQUERADE
答案1
您的问题主要是主机的路由配置。我假设您当前的设置如下:
- enp1s0 接口的 IP 地址为 192.168.1.1/24
- enp3s0 接口的 IP 地址为 192.168.176.1/24
为了使两个 IP 网络之间的主机进行通信,它们的路由表中需要有一个专用条目。
- 192.168.1.0/24上需要访问网络摄像机的主机需要知道192.168.1.1是192.168.176.0/24的路由器。
- 192.168.176.0/24 上的主机需要到 192.168.1.0/24 的路由。
现在我假设 IP 摄像机的静态/DHCP 配置是通过 192.168.176.1 路由默认流量,因此它们知道向 PC 发送数据包的位置。但 192.168.1.0/24 上的 PC 只有一个默认条目:互联网路由器。因此,任何发送到 192.168.176.0/24 的数据包都会发送到那里并丢失。
你可以
- 配置 192.168.1.0/24 上的 DHCP 路由器,使用“无类静态路由”选项通过 192.168.1.1 通告静态路由到 192.168.176.0/24
- 手动添加 192.168.1.1 作为 PC 上 192.168.176.0/24 的网关
您还需要刷新 iptables 规则。 POSTROUTING 规则会搞乱路由,而 FORWARD 规则毫无用处(除非你有 DROP 策略)。
iptables -t nat -F POSTROUTING
iptables -F FORWARD
您的摄像机可以看到 PC,因为它们配置了默认网关 192.168.176.1 和 nat POSTROUTING 条目。例如,如果网络摄像机 192.168.176.10 向 PC 192.168.1.20 发送数据包,该数据包将首先发送到默认网关 192.168.176.1 (enp3s0)。 Ubuntu PC 会将数据包转发到 enp1s0,将发送者的地址重写为自己的地址 192.168.1.1。当 192.168.1.20 回复数据包时,它会将其发送回替换的地址 192.168.1.1。当Ubuntu PC收到它时,它知道这是对IP摄像机192.168.176.10的回复。因此它将目标地址重写为192.168.176.10并通过enp3s0转发。
现在您不想用 NAT 来扰乱数据包,您只需要 IP 路由。在前面的示例中,PC 将摄像机 IP 地址视为 192.168.1.1,因为它已被 Ubuntu PC 替换。一旦你设置了正确的路线,
- 在PC与摄像机发起的连接中,PC将看到摄像机的IP地址为192.168.176.10。
- 在摄像机与 PC 发起的连接中,PC 仍会看到摄像机 IP 地址为 192.168.1.1(经过 NAT 处理的地址)
对于简单的 IP 设备,第二个不太重要。但这可能会导致错误行为。例如,如果您有一台托管交换机并且想要使用 SNMP 陷阱。您应该删除该iptables -t nat -A POSTROUTING -j MASQUERADE
规则。
将出现的一个问题是:您希望您的网络摄像机访问互联网吗?如果没有,我将包含一条 iptables FORWARD 路由,以拒绝来自 192.168.176.0/24 的数据包前往除 192.168.1.0/24 之外的任何地方。如果您希望授予访问权限,则需要使用到 192.168.176.0/24 的静态路由配置路由器。
答案2
子网地址和名称示例
净“主”192.168.1.0/24 (255.255.255.0) – enp1s0
净“相机”192.168.176/24 (255.255.255.0) – enp3s0
您正在从“cameras”转发到“main”:
iptables --table nat --append POSTROUTING --out-interface enp1s0 -j MASQUERADE
iptables --append FORWARD --in-interface enp3s0 -j ACCEPT
main 有一个默认网关,可将流量“路由”到本地子网或互联网。
如果您向桥添加相反的规则:
iptables --table nat --append POSTROUTING --out-interface enp3s0 -j MASQUERADE
iptables --append FORWARD --in-interface enp1s0 -j ACCEPT
和
在“main”上的默认网关中添加一条到子网 192.168.176.0/24 的网桥计算机的路由。
语法错误,但你明白了
route add -net 192.168.2.176/24 gateway “bridge computer”
我认为这将实现您想要的,而无需添加或更改相机上的网关信息。