如何使用 Arch Linux 通过以太网电缆共享与互联网的无线连接?
也就是说,我有一台带有 wifi 连接到互联网的笔记本电脑,我想与一台没有通过以太网电缆运行的 wifi 软件的计算机共享该笔记本电脑。
这里有一个指南
但它使用了ifconfig
,我认为这已经过时了。
接收计算机是一台 Windows 机器,但我认为这并不重要。
答案1
在您的笔记本电脑上,需要使用以下命令在接口之间路由流量并设置 NAT:
sudo sysctl net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -o [your wireless adapter] -j MASQUERADE
您还需要为两台计算机上通过电缆连接的以太网网卡提供静态 IP。手动或使用类似的应用程序Network Manager
。在第二台没有互联网连接的计算机上,您需要将笔记本电脑的静态 IP 地址添加为网关并设置 DNS 服务器的 IP,与您的笔记本电脑上的相同(cat /etc/resolv.conf
可能会显示 DNS 服务器的 IP/IP,除非使用 DNS 设置的现代实现)。
答案2
有一个简单的指南https://oracle-base.com/articles/linux/use-iptables-to-implement-packet-filtering-and-configure-nat。但我发现,在Windows中,Linux PC正在使用的DNS地址也必须在Windows中给出。
我有一个 3G USB 调制解调器连接到我的 Linux PC,然后我有两台 Windows PC 可以上网。它被称为(内核)数据包转发,并且当您最终理解它时,它非常简单且快速。
您需要通过在 Linux 上运行命令“ifconfig”(在终端中)和在 Windows 上运行“ipconfig”命令(在命令提示符中)来找出网络接口名称。 Linux 上的接口名称位于最左侧,例如:enp2s0、enp3s0、enp0s18f2u6、lo。现在您设置打包转发:
首先,您需要在 Linux PC 上启用数据包转发(请参阅我从 oracle-base.com 链接的指南)。
接下来,您可以运行这些命令,如 oracle-base.com 指南所述(但是请稍等,然后继续阅读):
sudo iptables -I 转发 -i my_lan_interface -o my_modem_interface -j 接受 sudo iptables -I 转发 -i my_modem_interface -o my_lan_interface -j 接受 sudo iptables -t nat -I POSTROUTING -o my_modem_interface -j MASQUERADE
但我在网上找到了一个更强大的方法:
sudo iptables -t nat -A POSTROUTING -o my_modem_interface -j MASQUERADE --random sudo iptables -A FORWARD -i my_lan_interface -o my_modem_interface -j 接受 sudo iptables -A FORWARD -i my_modem_interface -o my_lan_interface -m conntrack --ctstate 相关,已建立 -j 接受 sudo iptables -A 转发 -j 删除
以下是对上面命令(“更强大”的示例)的解释,顺序相同:
- 第一条命令:在 my_modem_interface 上启用伪装,以便在传出数据包上重写源地址。 --random 标志用于具有对称 NAT。
现在我们要配置转发规则。 iptables 默认情况下会无条件转发所有流量。在这里,我们更愿意限制来自互联网的入站流量并允许所有出站流量:
- 第二个命令:允许从 my_lan_interface 到 my_modem_interface 的流量。
- 第三个命令:允许将流量从 my_modem_interface 返回到 my_lan_interface。
- 第四个命令:丢弃所有其他不应转发的流量。
当您重新启动 Linux PC 时,您将必须重新输入这些命令 - 我有一个在每次启动时运行它们的脚本。您可以通过适当的“服务”调用使这些更改永久化(再次参见上面给出的 oracle-base.com 指南),但我建议在每次启动时运行它们(在脚本中),因为您可能想要试验和更改撤消您保存的内容是另一个挑战。如果出现问题,或者您想要更改某些内容,或者您只是不想在当前会话中使用此功能(或根本不需要),那么只需重新启动您的电脑,它们就会消失 - 但您必须自己禁用数据包转发(在重新启动之前,在 /etc/sysctl.conf 中写入“net.ipv4.ip_forward = 0”)以完全禁用此技术。
现在您必须在 Linux PC 和其他计算机之间创建网络连接(以太网连接)。例如:
A) 在连接到互联网的 Linux PC(我使用 Fedora)上,使用网络连接管理器创建以太网连接,选择适当的接口(网卡名称,在我的例子中为 enp3s0),将这台 Linux PC 连接到我的局域网。请务必选择正确的防火墙区域,否则您的 LAN 将无法访问互联网。因此,由于这是您的内部 LAN 接口,请将防火墙区域设置为“受信任”,但调制解调器连接接口应设置为“公共”。接下来,在 IPv4 设置选项卡中,设置必须使用 IPv4 进行连接(IPv6 可以忽略),并选择手动地址设置。现在添加地址 192.168.2.100 - 这将是 LAN 上这台 Linux PC 的地址。网络掩码将自动设置(255.255.255.0,因为这是“C 类”(私有)地址)。应用您的设置并连接。
B) 在第二台 PC(使用 Linux 或 Windows,通过以太网电缆连接到上面的第一台 PC)上,也创建一个网络连接(如果是 Windows,请查看下面的详细信息),选择适当的网络接口(设备/卡)连接到第一台 PC),对第一台 PC 使用上述手动 IPv4 设置,但此处设置地址 192.168.2.101 - 这将是 LAN 上第二台 PC 的地址(这些是“私有”地址,意味着它们在您的 LAN 之外是不可见的)。
B1) 如果您想连接Windows(操作系统),请进入“网络和共享中心”->“更改适配器设置”,在这台Windows PC上查找与您的LAN网卡对应的网络接口,该网卡也是通过以太网电缆连接到第一台 PC。现在,选择该接口,右键单击属性。您将看到一个列表。这里取消选择“Internet Protocol Version 6”,然后双击“Internet Protocol Version 4”。现在输入地址 192.168.2.101 - 这将是该 Windows PC 在该接口(在该 [LAN/以太网] 连接上)上的地址。按下 Tab 键以便自动填写网络掩码 (255.255.255.0)。 (“网络配置文件”可以设置为“公开”。)
B2) 可能需要将网关地址设置为第一台 Linux PC,因此您需要输入网关地址 192.168.2.100。
C) 现在,您必须输入您的第一台 Linux PC 正在使用的 DNS 地址。例如,我的调制解调器使用 DNS 地址 192.168.1.1(我可以使用命令“nmcli device show | grep IP4.DNS”找到该地址,其中 interfacename 是连接到互联网的 Linux 接口的名称)。 (如果您使用 Windows 连接到互联网,请在终端/命令提示符中运行“ipconfig”,查找 DNS 地址)。就是这样。 DNS 信息对于获得互联网连接至关重要。
简而言之:
我的调制解调器地址:192.168.1.100,DNS 192.168.1.1。
LAN 上的 Linux PC 地址:192.168.2.100,使用 iptables 重定向流量启用数据包转发,如上所述,防火墙区域设置为“受信任”。
Windows PC 1 地址:192.168.2.101,DNS 设置为 192.168.1.1,网络配置文件设置为公共。 (默认网关设置为Linux PC:192.168.2.100)。
Windows PC 2 地址:192.168.2.102,DNS 设置为 192.168.1.1,网络配置文件设置为公共。 (默认网关设置为Linux PC:192.168.2.100)。
(所有计算机通过简单的以太网交换机与普通以太网电缆(也称为“跳线”或“跳线”)连接在一起,而不是交叉,因为“现代”网卡自己进行交叉,因此您可以使用交叉电缆或不要交叉电缆,甚至将它们混合在一起连接。)
还有一个指南:https://medium.com/@TarunChinmai/sharing-internet-connection-from-a-linux-machine-over-ethernet-a5cbbd775a4f,它使用 Google 的 DNS 地址。一探究竟。