AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 742128
Accepted
wangt13
wangt13
Asked: 2023-04-06 18:01:11 +0800 CST2023-04-06 18:01:11 +0800 CST 2023-04-06 18:01:11 +0800 CST

如何配置工作在 STA 和 AP 模式的 WLAN 的 Linux 组网?

  • 772

我正在开发一个嵌入式 Linux 系统,其中有一个 WLAN 接口可以在 STA 和 AP 模式下工作。

valid interface combinations:
                 * #{ AP } <= 2, #{ managed } <= 2, #{ P2P-client, P2P-GO } <= 2, #{ P2P-device } <= 1, #{ IBSS } <= 1,
                   total <= 4, #channels <= 2

现在我已经将 WLAN 接口配置为 STA 和 AP 模式(通过创建软件 AP uap0),如下所示,

# ifconfig
uap0      Link encap:Ethernet  HWaddr D6:9C:DD:A0:13:78
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4749 errors:0 dropped:333 overruns:0 frame:0
          TX packets:26 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:458760 (448.0 KiB)  TX bytes:5526 (5.3 KiB)

wlan0     Link encap:Ethernet  HWaddr D4:9C:DD:A0:13:78
          inet addr:192.168.95.14  Bcast:192.168.95.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:36 errors:0 dropped:0 overruns:0 frame:0
          TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:5425 (5.2 KiB)  TX bytes:1723 (1.6 KiB)

wlan0是物理接口,其IP地址是从外部AP获取的。
uap0是作为AP使用的软件接口,可以用我的手机连接。

我启用了sysctl -w net.ipv4.ip_forward=1,并route -n显示,

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.95.1    0.0.0.0         UG    0      0        0 wlan0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 uap0
192.168.95.0    0.0.0.0         255.255.255.0   U     0      0        0 wlan0

我可以从目标板和我的手机 IP (192.168.0.190) ping 外部公共互联网。
但是现在我的手机无法通过WIFI(uap0)上网。
在这种情况下如何配置Linux网络以使我的手机可以访问公共互联网?

linux
  • 1 1 个回答
  • 19 Views

1 个回答

  • Voted
  1. Best Answer
    telcoM
    2023-04-06T20:00:19+08:002023-04-06T20:00:19+08:00

    使用您当前的设置,外部 AP 可能认为 192.168.95.x/24 是一个“边缘”网络,即据它所知,没有其他网段可以通过它访问。

    但是你的嵌入式Linux AP和手机之间的网络形成了另一个网段:192.168.0.x/24。外部 AP 和它之外的网络对此一无所知,事实上,相同的 IP 地址范围可能在网络的其他地方使用。(我会称你的 192.168.0.x/24 网段为“流氓”网段,而可能具有相同 IP 地址的其他网段为“官方”网段。)

    当您的手机使用 192.168.0.190 作为其源 IP 将传出数据包发送到互联网时,您的笔记本电脑可以将其路由到外部 AP,并且外部 AP 可能会将其发送到其上游路由器......但是如果该路由器具有“ martian filter”配置后,它将发现源地址与它的预期不匹配,即只有源地址在 192.168.95.x 范围内的数据包应该来自外部 AP,并将其过滤掉。但让我们假设这不会发生。

    如果来自 Internet 的回复到达目标地址为 192.168.0.190 的外部 AP 的上游路由器,将发生以下两种情况之一:

    • 如果存在正式的 192.168.0.x/24 网段,则回复数据包将路由到那里,而不是发送到您的笔记本电脑。
    • 如果路由器没有官方定义的192.168.0.x/24网段,路由器会有点疑惑:“我为什么会得到这个?据我所知,没有这样的网络。一定是一些路由错误的垃圾,所以它就扔进了垃圾桶!” 它还可能将“网络无法访问”的 ICMP 错误消息发送回回复数据包的发送方。

    换句话说,要使您当前的配置正常工作,您必须让外部 AP 的上游路由器知道您的 192.168.0.x/24 网络以及使用 192.168.95.14 作为路由器可以访问它的事实/网关。但是除非您具有对上游路由器的管理访问权限,否则您无法执行此操作。

    相反,您必须将嵌入式系统配置为伪装(=一种 NAT 形式)手机的流量,使其看起来像是来自嵌入式系统本身:

    iptables -t nat -A POSTROUTING -o wlan0 -s 192.168.0.0/24 -j MASQUERADE
    

    (-j SNAT --to-source 192.168.95.14也可以,但-j MASQUERADE在外部 AP 和嵌入式系统之间使用 DHCP 的情况下效果更好。)

    请注意,这意味着您的手机和互联网之间将存在“双重 NAT”,这并不理想,并且可能会导致某些网络协议出现问题。

    解决了这个基本的路由问题之后,可能还有次要问题;就像评论中提到的 dirkt 一样,您必须通过某种方式为电话提供 DNS 服务器地址。

    • 1

相关问题

  • 有没有办法让 ls 只显示某些目录的隐藏文件?

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve