如何在 Linux 上设置接入点并仍然连接到互联网?

如何在 Linux 上设置接入点并仍然连接到互联网?

我需要使用装有 Ubuntu 22.04 LTS 的笔记本电脑作为接入点,将仅以太网的设备连接到互联网,并能够ssh从网络进入它。

笔记本电脑没有 WiFi 可以访问互联网,但应该使用 USB 网络共享进行连接。我的工作电脑应该使用 WiFi 连接到笔记本电脑,这样它既可以访问互联网,又可以访问设备。

我认为最好有这样的内容:

 +--------------------+          +--------------------------+           +-------------------+
 |                    |          |                          |           |                   |
 |                    |    USB   |                          |  Eth      |     Device to     |
 |   Mobile phone     o----------o       Old laptop         +-----------+     connect       |
 |   (with internet)  |          |                          |           |                   |
 |                    |          |                          |           |                   |
 +--------------------+          +--------------------------+           +-------------------+
                                             -
                                             - WiFi
                                             -
                                             -
                                 +--------------------------+
                                 |                          |
                                 |                          |
                                 |        Work PC           |
                                 |                          |
                                 |                          |
                                 +--------------------------+

手机应该为所有三个设备提供互联网,而工作电脑应该能够ssh访问另外两个设备。

hostapd我通过使用 在笔记本电脑上设置接入点,并通过使用网桥(使用)将所有三个接口桥接在一起,基本上成功地实现了这一点ip link set dev <interface> master br0

但是,现在笔记本电脑无法连接到网络,因为它的所有接口都被其他设备使用了。此外,我无法从工作电脑上看到 ARP 表中的其他设备,我认为这是因为笔记本电脑或手机进行了一些过滤。

我听说这个问题通常可以通过创建一个或两个虚拟接口来解决,但是我试过了,现在我的工作电脑似乎无法再连接到互联网。我怀疑这是因为并非所有网卡都支持此功能,而我的网卡显然不支持。

那么,我该如何让笔记本电脑连接到它所托管的网络呢?或者,我应该如何设置这个配置?谢谢!

当前配置

/etc/hostapd/hostapd.conf

interface=wlp2s0
bridge=br0
driver=nl80211
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
ssid=acer-SAN13254
country_code=IT
hw_mode=g
channel=6
beacon_int=100
dtim_period=2
max_num_sta=255
rts_threshold=-1
fragm_threshold=-1
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wmm_enabled=1
wmm_ac_bk_cwmin=4
wmm_ac_bk_cwmax=10
wmm_ac_bk_aifs=7
wmm_ac_bk_txop_limit=0
wmm_ac_bk_acm=0
wmm_ac_be_aifs=3
wmm_ac_be_cwmin=4
wmm_ac_be_cwmax=10
wmm_ac_be_txop_limit=0
wmm_ac_be_acm=0
wmm_ac_vi_aifs=2
wmm_ac_vi_cwmin=3
wmm_ac_vi_cwmax=4
wmm_ac_vi_txop_limit=94
wmm_ac_vi_acm=0
wmm_ac_vo_aifs=2
wmm_ac_vo_cwmin=2
wmm_ac_vo_cwmax=3
wmm_ac_vo_txop_limit=47
wmm_ac_vo_acm=0
eapol_key_index_workaround=0
eap_server=0
own_ip_addr=127.0.0.1
wpa=2
wpa_passphrase=#####################
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

答案1

但是现在笔记本电脑无法连接到网络,因为它的所有接口都被其他设备使用了

使用 Linux 桥接器,br0接口本身不仅充当桥接器,还充当桥接器中的主机操作系统“端口”。因此,现在需要在 br0 上配置完全相同的 IP 地址(以及默认网关等),以便旧 PC 可以访问 Internet,而不是在 usb0 上配置用于 USB 网络共享的 IP 地址。

也就是说,您需要在 br0 上运行 DHCP 客户端。

然而,桥接可能无法 100% 很好地与 USB 网络共享配合使用 - 尽管链接通过 USB 模拟以太网接口,但其行为不一定相同;例如,手机可能只需要一个设备(只有一个 MAC 地址)或可能只发出一个 IP 地址。

因此,你可能只需要桥接 eth0 和 wlan0,而不需要 USB 网络共享接口;相反,如果工作电脑需要互联网访问,那么“旧电脑”就需要路线在 USB 和桥接器之间。这需要做更多的工作,因为您需要设置 iptables(执行这两项操作的说明相当通用,并且通常与“设置 AP”说明一起找到)以及 br0 上的一些 DHCP 服务器,但这可能是更可靠的选择。

此外,我无法从工作电脑上看到 ARP 表中的其他设备,我认为这是因为笔记本电脑或手机进行了一些过滤。

ARP 表将只包含 PC 主动与之通信的设备;它是一个缓存最近的 IPv4 到 MAC 地址查找结果。如果工作 PC 尚未通过 IPv4 联系设备,则它没有理由进行 ARP 查询,因此 ARP 表中不会缓存任何内容。

手机无法进行太多过滤——假设它发布的 IP 配置将所有设备放在同一个网络/子网中(这是最简单和最可能的设置),那么同一个子网中的设备可以通过网桥直接通信,无需路由器的参与。

相关内容