差不多就是这样。如果我通过 wlan0 连接到互联网,如何与插入有线以太网端口 eth0 的设备共享此连接?
答案1
我有一台运行 Ubuntu 9.10 的 MacMini,使用无线连接上网。然后我将 Xbox360 连接到 MacMini 的以太网端口,以便使用 Xbox Live。
这非常简单。只需右键单击网络管理器并选择“编辑连接”。然后在“有线”选项卡中,您可以使用现有的有线连接(或通过点击“添加”按钮创建一个新的连接,将新连接命名为“共享网络端口”或类似名称),弹出其 IPv4 选项卡并在“方法”中选择“共享到其他计算机”。应用所有内容并关闭网络管理器窗口。
现在,当您需要将某些东西插入该以太网端口时,只需单击网络管理器并选择那里的“共享网络端口”条目即可共享您的 WIFI 互联网连接。
如果您希望这是一个用于共享而不用于其他用途的经常使用的以太网连接,请随意编辑“Auto Eth0”,而不是像我上面描述的那样创建新条目。但是,创建新条目可以让您有一定的选择灵活性。
请注意,这使用了一些 NAT(网络地址转换)魔法才能正常工作,因此 Xbox360(或插入有线端口的任何设备)都会获得一个时髦的 IP 地址。
从记忆中看,它也只能看到互联网 - 我认为你看不到主机,即具有互联网连接的计算机。你可以设置它,但我认为它需要对 DHCP 服务器进行一些调整。我不需要它,所以我没有走那条路。
答案2
这很简单。右键单击网络管理器,然后单击编辑连接。在有线选项卡下,添加新连接。在 IPV4 设置选项卡下,选择“共享给其他人”作为方法。
现在其他机器应该连接到 LAN 并自动访问 Internet。
答案3
这里有一个简单的指南https://oracle-base.com/articles/linux/use-iptables-to-implement-packet-filtering-and-configure-nat。但我发现,在 Windows 中,Linux PC 使用的 DNS 地址也必须在 Windows 中提供。
我的 Linux PC 上连接着一个 3G USB 调制解调器,通过它我有两个 Windows PC 可以上网。这叫做(内核)数据包转发,当你最终理解它时,它非常简单快捷。
您需要通过在 Linux 上运行命令“ifconfig”(在终端中)和在 Windows 上运行命令“ipconfig”(在命令提示符中)来找出您的网络接口名称。在 Linux 上,接口名称位于最左侧,例如:enp2s0、enp3s0、enp0s18f2u6、lo。现在您可以设置打包转发:
首先,您需要在 Linux PC 上启用数据包转发(请参阅我从 oracle-base.com 链接的指南)。
接下来,您可以运行这些命令,正如 oracle-base.com 指南所述(但请稍等并继续阅读):
sudo iptables -I FORWARD -i my_lan_interface -o my_modem_interface -j ACCEPT sudo iptables -I FORWARD -i my_modem_interface -o my_lan_interface -j ACCEPT 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 ACCEPT sudo iptables -A FORWARD -i my_modem_interface -o my_lan_interface -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT sudo iptables -A FORWARD -j DROP
以下是对上述命令的解释(“更为强大”的示例),按相同的顺序:
- 第一个命令:在 my_modem_interface 上启用伪装,以便在传出数据包上重写源地址。--random 标志用于对称 NAT。
现在我们要配置转发规则。默认情况下,iptables 将无条件转发所有流量。在这里,我们倾向于限制来自互联网的入站流量并允许所有传出流量:
- 第二个命令:允许从 my_lan_interface 到 my_modem_interface 的流量。
- 第三个命令:允许从 my_modem_interface 返回流量到 my_lan_interface。
- 第四条命令:丢弃所有其他不应转发的流量。
当您重新启动 Linux PC 时,您必须重新输入这些命令 - 我有一个在每次启动时运行它们的脚本。您可以使用适当的“服务”调用使这些更改永久生效(再次参见上面给出的 oracle-base.com 指南),但我建议在每次启动时(在脚本中)运行它们,因为您可能想要尝试和更改某些内容,而撤消您保存的内容是另一个挑战。如果出现问题,或者您想要更改某些内容,或者您只是不想在当前会话中使用此功能(或根本不想要),那么只需重新启动 PC,它们就会消失 - 但您必须自己禁用数据包转发(在重新启动之前在 /etc/sysctl.conf 中写入“net.ipv4.ip_forward = 0”)才能完全禁用此技术。
现在您必须在 Linux PC 和其他计算机之间创建网络连接(以太网连接)。例如:
A) 在连接到互联网的 Linux PC 上(我使用 Fedora),使用网络连接管理器,我创建了一个以太网连接,选择适当的接口(网卡名称,在我的情况下是 enp3s0),将该 Linux PC 连接到我的 LAN。一定要选择正确的防火墙区域,否则您的 LAN 将无法访问互联网。由于这是您的内部 LAN 接口,因此请将防火墙区域设置为“受信任”,但调制解调器连接接口应设置为“公共”。接下来,在 IPv4 设置选项卡中,设置必须使用 IPv4 进行连接(可以忽略 IPv6),然后选择手动地址设置。现在添加地址 192.168.2.100 - 这将是您的 LAN 上这台 Linux PC 的地址。网络掩码将自动设置(255.255.255.0,因为这是一个“C 类”(私有)地址)。应用您的设置并连接。
B) 在第二台电脑上(使用 Linux 或 Windows,通过以太网电缆连接到上面的第一台电脑),也创建一个网络连接(如果是 Windows,请参阅下面的详细信息),选择适当的网络接口(连接到第一台电脑的设备/卡),使用如上所述为第一台电脑手动设置 IPv4,但这里设置地址 192.168.2.101 - 这将是第二台电脑在您的 LAN 上的地址(这些是“私有”地址,意味着它们在您的 LAN 之外不可见)。
B1) 如果要连接 Windows(操作系统),请转到“网络和共享中心”->“更改适配器设置”,然后查找与此 Windows PC 上的 LAN 网卡相对应的网络接口,该接口也通过以太网电缆连接到第一台 PC。现在,选择该接口,右键单击“属性”。您将看到一个列表。在这里取消选择“Internet 协议版本 6”,然后双击“Internet 协议版本 4”。现在输入地址 192.168.2.101 - 这将是该接口上此 Windows PC 的地址(在该 [LAN/以太网] 连接上)。向下选项卡,以便自动填写网络掩码(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 地址。请查看。
答案4
Ubuntu 23.10
这是两个 Ubuntu 23.10 和拓扑之间的工作设置现在的样子:
Internet --- Wi-Fi --- Computer 1 --- Ethernet --- Computer 2
计算机 1
打开设置->网络。
单击“有线”下的齿轮:
我认为我没有改变这里任何东西:
选择“共享到其他计算机”(TODO 如何从 CLI 执行此操作?https://unix.stackexchange.com/questions/243408/share-wlan-connection-to-ethernet-using-command-line)
然后“应用”。
接下来你还需要:
sudo sysctl net.ipv4.ip_forward=1
如果您将其设置为0
似乎是默认值,那么事情就不会起作用,因为“显然”计算机 1 不会像我们希望的那样转发来自计算机 2 的数据包,并且 GUI 过程似乎不会影响它,这很遗憾。要使其在重新启动后永久生效,请取消注释/etc/sysctl.conf
:
# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1
计算机 2
我认为我没有在计算机 2 中更改任何内容,它只是设置为“自动 (DHCP)”
此后,计算机 2 现在可以通过计算机 1 连接到互联网,例如:
ping example.com
检查网络的样子
在计算机 1 中:
ip a
显示:
2: enp1s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether fc:5c:ee:24:fb:b4 brd ff:ff:ff:ff:ff:ff
inet 10.42.0.1/24 brd 10.42.0.255 scope global noprefixroute enp1s0f0
valid_lft forever preferred_lft forever
3: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 04:7b:cb:cc:1b:10 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.123/24 brd 192.168.1.255 scope global dynamic noprefixroute wlp2s0
valid_lft 81730sec preferred_lft 81730sec
inet6 fe80::3597:15d8:74ff:e112/64 scope link noprefixroute
valid_lft forever preferred_lft forever
和计算机 2:
2: enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 54:e1:ad:b5:5b:08 brd ff:ff:ff:ff:ff:ff
inet 10.42.0.70/24 brd 10.42.0.255 scope global dynamic noprefixroute enp0s31f6
valid_lft 2914sec preferred_lft 2914sec
inet6 fe80::a64f:794b:b8fa:5501/64 scope link noprefixroute
valid_lft forever preferred_lft forever
所以我们知道这些 IP 是与 DHCP 自动协商的。
我们还可以通过以下方式查看计算机 1 分配给计算机 2 的 IP:
sudo bash -c 'tail -n+1 /var/lib/NetworkManager/*.leases'
输出类似以下内容:
1707478545 54:e1:ad:b5:5b:08 10.42.0.70 ciro-p51 01:54:e1:ad:b5:5b:08
所以我们还可以看到 IP10.42.0.70
被分配给了计算机 2。另请参阅:如何显示活动的 dhcp 租约
为了好玩我们现在还可以使用这些 IP 从一台计算机连接到另一台计算机,例如从 1 到 2:
ping 10.42.0.70
从 2 到 1:
ping 10.42.0.1
为了更有趣,我们还可以在计算机 1 上运行 Wireshark,并观察它如何接收和转发ping
来自计算机 2 的数据包。我们通过以下方式观察所有接口:
sudo wireshark -k -f 'icmp' -i enp1s0f0 -i wlp2s0
捕获以太网和 Wi-Fi 流量。然后每个ping
请求在 Wireshark 上生成 4 行:
Time Source Dest Hw src Hw dst Protocol
1 0.000000000 10.42.0.70 93.184.216.34 54:e1:ad:b5:5b:08 fc:5c:ee:24:fb:b4 ICMP request id=0x79ee, seq=8/2048, ttl=64 (reply in 4)
2 0.000074761 192.168.1.123 93.184.216.34 04:7b:cb:cc:1b:10 9c:53:22:17:e2:0e ICMP request id=0x79ee, seq=8/2048, ttl=63 (reply in 3)
3 0.098882299 93.184.216.34 192.168.1.123 9c:53:22:17:e2:0e 04:7b:cb:cc:1b:10 ICMP reply id=0x79ee, seq=8/2048, ttl=51 (request in 2)
4 0.098952451 93.184.216.34 10.42.0.70 fc:5c:ee:24:fb:b4 54:e1:ad:b5:5b:08 ICMP reply id=0x79ee, seq=8/2048, ttl=50 (request in 1)
因此我们可以清楚地看到计算机 1 从以太网接收以太网帧、打开它们、将它们包装成用于 Wi-Fi 的新帧,然后在收到来自 example.com 的回复时反向执行相同的操作。
测试设备为:计算机 1 = Lenovo ThinkPad P14s,计算机 2 = Lenovo ThinkPad P51,且 Wi-Fi 已关闭。