![无法从 LAN 连接互联网](https://linux22.com/image/60855/%E6%97%A0%E6%B3%95%E4%BB%8E%20LAN%20%E8%BF%9E%E6%8E%A5%E4%BA%92%E8%81%94%E7%BD%91.png)
我有以下设置。节点 1 和节点 2 在一个 LAN 中。两者都使用 eth0 网卡连接 LAN。两者都是Debian系统。此外,node1 使用 wlan0 网卡连接到互联网。期望节点 1 和节点 2 都可以访问互联网。
通过此设置,我无法访问互联网。内核IP向路由器显示默认规则
基本上我遇到了两个问题。
问题一:
在节点 1 上
通过此设置,node1:kernel ip 表显示通过 eth0 的默认规则。因此连接到 router1/LAN。我尝试了 ip route del & 添加新的默认规则设备 wlan0。 ip 表看起来不错(至少是我期望通过 wlan0 的默认规则)。但仍然没有互联网连接。问题 1:这是删除和添加默认规则以更改系统行为的正确方法吗?它应该选择将数据包发送到哪个设备。或者我需要一些额外的配置。
现在,出于好奇,我刚刚翻转了开发人员。表示 wlan0 网卡现在已连接到 LAN,而 eth0 已连接到 router2(外部网络)。 ip 表显示 eth0 的默认规则。这次 eth0 连接到 router2,我得到了互联网连接。可以 ping、浏览等等。问题2:eth0 是否始终用于默认规则。怎么换成其他网卡。这里是wlan0。
问题2:
在节点 2 上
然而,这种成功不能持续更长时间,因为从节点 2 开始,我没有从节点 2 获得互联网连接。它是静态配置,GW 被称为节点 1 的 ip 地址。
问题3:这是正确的吗?或者我是否需要在node1上进行任何SNAT或MASQRADE类型的配置才能或者router-2应该处理这个问题..我在这里缺少什么来获得互联网连接。
我对上述场景进行了一些澄清。以及对一些评论的澄清,因为我尚未被授权发表评论。
节点 2 的互联网访问(如果 LAN 上还有更多系统)只能通过节点 1 进行。 LAN 路由器(router-1)已启用 dhcp,并且所有节点都是它的客户端。与互联网路由器 2 相同。
那么在这种情况下我是否需要在node-1上进行任何特殊配置。
在节点 1 上,ip 路由:默认通过 dev eth0 在节点 2 上,ip 路由:默认通过 dev eth0。
另一个棘手的问题(但不太重要,我可以通过使用 eth0 连接到我的互联网路由器来解决这个问题),我已经问过:为什么默认总是通过 eth0。我怎样才能强制它使用 wlan0(在我的情况下)连接的网关。我的默认删除/添加不起作用。
答案1
如果没有其他信息,我已经可以说在节点 1 和节点 2 上都不需要 SNAT 或 MASQUERADE。这应该由连接到互联网的系统(可能是路由器)来完成。
但是,如果来自节点 2 的流量应通过节点 1 路由,则节点 1 必须为节点 2 执行 SNAT 或 MASQUERADE(除了网关/路由器为节点 1 执行的 SNAT / MASQUERADE 之外)。
答案2
您在 Node-1 上启用了 IP 转发吗?尝试:
sysctl -w net.ipv4.ip_forward=1
如果有效,请通过将以下行添加
net.ipv4.ip_forward = 1
到 /etc/sysctl.conf 中使其永久化(确保将其设置为 0 的类似行已删除或注释掉)。
答案3
在这里,我假设(您的目标是实现)来自 LAN 的所有互联网流量都应通过节点 1 传递。您仅使用 IP4。正如您所提到的,节点 1 已经连接到互联网。
在节点 2 上:内核 ip 表默认规则应将 GW 作为节点 1,并使用 dev eth0。
在节点 1 上:根据上述假设,默认规则应将 GW 设为“路由器 2”dev eth0。
此外,以下内容必须为真或添加。 1) IP_FORWARD 标志。
ipv4.ip_forward flag must be set to 1. (use sysctl or change the sysctl conf file variable)
# sysctl -w net.ipv4.ip_forward="1"
注意:重启后将无法生存。
2) 在过滤表中添加IP转发规则。这会将所有流量从设备 eth1 转发到 eth0。
# iptables -t filter -A FORWARD -i eth1 -o eth0 -j ACCEPT
3)屏蔽传出ip
Qu :如果非常需要屏蔽来自节点 1 的传出 IP,以便将流量从路由器 2 向外发送(到互联网),那么谁会执行该 MASQUERADE。答:Router-2 默认执行此操作。
Qu :那么为什么 router-2 不能用于节点 2 或 LAN 中的任何其他机器。
Ans:由于节点 2 和其他节点不在路由器 2 的域中。在这种情况下,节点 1 必须为 LAN 中连接的所有其他节点明确执行 MASQUERADING。因此这一步。
# iptables -nat -A POSTROUTING --out-interface eth0 -j MASQUERADE
# iptables save
现在您可以从节点 2 或 LAN 中连接的任何其他系统获得互联网连接。
笔记 :然而,上述内容在节点 1 重新启动后将无法继续存在。我不会介绍如何使其持久。
注意:如果 router-2 的 NIC 是 wlan0,则不确定上述方法是否有效,因为 AP(router-2) 可能会拒绝 MASQURADE node-2 数据包。由于 eth0@node-1 的 mac id 未在 AP 上注册,与 wlan0 不同。这里我们必须显式地将 eth0 数据包的 mac 地址更改为 wlan0 地址。让我知道。