Android 双网卡配置为连接到Android主机的PC提供外网访问(1)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: Android 双网卡配置为连接到Android主机的PC提供外网访问(1)

昨天完成了Linux双网卡配置为连接到Linux主机的PC提供外网访问的调试 , 今天想测下Android系统是否支持 , 本以为直接用昨天的脚本就可以实现 发现还是有些区别的。 本文大体和Linux调试过程差不多 , 本文只是简单验证了Android系统的可行性 并且把部分步骤给详细验证并完成了一个Android的脚本 , 真的 我验证了至少10次 命令顺序 以及各种状态 命令还是挺麻烦的。

考虑Android系统的复杂性 打算后面有时间把这个功能添加到系统接口中 实现代码调用完成就能配置双网卡的内外网配置。

Android双网卡配置为连接到Android主机的PC提供外网访问

在本文中,我将介绍如何使用RK3568 Android11主板为连接到其内网口的PC提供外网访问。我将使用一个实际的故障排查案例来详细说明这个过程,并最终实现用脚本完成各项检查和配置工作。

背景

客户有一个RK3568 Android11主板,该主板有两个以太网接口:eth0(内网)和eth1(外网)。客户希望通过RK3568为连接到eth0的Windows PC提供外部网络访问。

简而言之,就是Windows PC通过网线连接到RK3568主板的内网口,就能在Windows PC访问www.baidu.com(外网)。

Windows PC设置

PC是Windows 10,需要通过图形界面或命令行来设置默认网关:

  1. 打开“控制面板”。
  2. 选择“网络和共享中心”。
  3. 在左侧,点击“更改适配器设置”。
  4. 右键点击网络连接(可能是“以太网”或类似名称),然后选择“属性”。
  5. 在列表中找到并双击“Internet 协议版本 4 (TCP/IPv4)”。
  6. 选择“使用下面的IP地址”并输入你的IP地址、子网掩码。在“默认网关”中,输入 192.168.52.2
  7. 点击“确定”保存设置。
#执行ipconfig简单确认下
ipconfig

RK3568 Android11设置

配置NAT(网络地址转换)

确保在RK3568上设置了正确的NAT规则。

iptables -F
iptables -t nat -F
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

配置双网口环境

如果没有一个接口在与试图添加的网关相同的子网上,可能需要配置一个接口来使用这个子网。例如,如果有一个名为 eth0 的接口,可以使用以下命令为其分配一个IP地址:

ifconfig eth0 192.168.52.2 netmask 255.255.255.0 up

192.168.52.2 是一个示例IP地址,你可以选择该子网上的任何可用地址。

配置路由

为了让RK3568能够正确地转发流量,需要配置路由表。可以使用以下命令添加路由:

ip route add default via 192.168.1.1 dev eth1 metric 102
ip route add 192.168.1.0/24 dev eth1 metric 102
ip route add 192.168.52.0/24 dev eth0

在这里192.168.1.1 是外网接口eth1的默认网关,192.168.1.0/24 是外网接口eth1所在的子网,192.168.52.0/24 是内网接口eth0所在的子网。

故障排查步骤

如果Windows 10 PC无法通过RK3568访问外部网络,需要进行一系列的故障排查步骤。

Ping测试

  • 从PC上ping RK3568的内部IP地址(192.168.52.2)。确保它是通的。
  • 从RK3568 ping PC的IP地址(192.168.52.1)。确保它也是通的。
  • 从RK3568 ping 外部网站,如8.8.8.8。确保外部网络是通的。
  • 从PC ping 8.8.8.8。如果这不起作用,但上述所有步骤都起作用,那么问题可能与NAT或路由有关。

检查NAT设置:确保在RK3568上正确设置了NAT。再次运行以下命令:

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

检查DNS:问题可能与DNS解析有关。尝试从PC ping一个域名,如www.baidu.com。如果这不起作用,但ping 8.8.8.8起作用,可能需要在PC上设置一个静态DNS,如Google的8.8.8.8和8.8.4.4。

防火墙设置:确保RK3568的防火墙允许流量通过。运行以下命令:

iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

脚本

为了方便地配置和检查网络环境,可以使用以下脚本来自动执行上述步骤:

执行一次不行 再执行一次 , 开机进launcher之后再执行 不然网络没起来。

#!/system/bin/sh
# 检查参数数量
if [ "$#" -ne 3 ]; then
    echo "使用方法: $0 <内网接口名> <内网接口IP地址> <外网接口名>"
    exit 1
fi
# 获取参数
INTERNAL_IF="$1"
IPADDR="$2"
EXTERNAL_IF="$3"
# 启用IP转发
echo "启用IP转发..."
echo 1 > /proc/sys/net/ipv4/ip_forward
# 清除现有的iptables规则
echo "清除现有的iptables规则..."
iptables -F
iptables -t nat -F
# 设置NAT规则
echo "设置NAT规则..."
iptables -t nat -A POSTROUTING -o $EXTERNAL_IF -j MASQUERADE
# 配置内网接口
echo "配置内网接口 $INTERNAL_IF..."
ifconfig $INTERNAL_IF $IPADDR netmask 255.255.255.0 up
# 等待一段时间,确保内网接口已经启动并配置
sleep 5
# 删除可能存在的默认路由
ip route del default 2>/dev/null
# 配置路由
echo "配置路由..."
ip route add default via 192.168.1.1 dev $EXTERNAL_IF metric 102
ip route add 192.168.1.0/24 dev $EXTERNAL_IF metric 102
ip route add 192.168.52.0/24 dev $INTERNAL_IF
# 检查配置是否正确
ETH0_IP=$(ifconfig $INTERNAL_IF | grep 'inet addr' | cut -d: -f2 | awk '{print $1}')
ETH1_IP=$(ifconfig $EXTERNAL_IF | grep 'inet addr' | cut -d: -f2 | awk '{print $1}')
if [ "$ETH0_IP" != "$IPADDR" ] || [ "$ETH1_IP" != "192.168.1.10" ]; then
    # 如果配置不正确,可以在此处添加其他命令或者发送通知
    echo "网络配置错误!"
fi
# 测试外网连接
echo "测试外网连接..."
ping -c 4 8.8.8.8
echo "脚本执行完毕!"

现在可以使用以下命令来运行脚本:

./enable_nat_routing.sh eth0 192.168.52.2 eth1

脚本执行结果:

rk3568_r:/vendor # ./setup_network.sh
RTNETLINK answers: No such process
rk3568_r:/vendor # busybox route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.1     0.0.0.0         UG    102    0        0 eth1
192.168.1.0     *               255.255.255.0   U     102    0        0 eth1
192.168.52.0    *               255.255.255.0   U     0      0        0 eth0
rk3568_r:/vendor # ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 66:64:66:98:2b:a4  Driver rk_gmac-dwmac
          inet addr:192.168.52.2  Bcast:192.168.52.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1249 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1496 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:178245 TX bytes:270750
          Interrupt:38
rk3568_r:/vendor # ifconfig eth1
eth1      Link encap:Ethernet  HWaddr 0a:0c:11:22:33:c7  Driver rk_gmac-dwmac
          inet addr:192.168.1.10  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::5103:8c9e:a84e:17f8/64 Scope: Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2576 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1588 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:412726 TX bytes:230968
          Interrupt:42

待解决和疑问:

  1. RK 3568 Android去ping PC是ping不通的?
  2. PC去ping RK3568ping不通的?
  3. 实现Android系统接口完成配置双网卡上网规则。

以上坑等我有时间搞完再补充

总结:

为连接到Android主机的设备提供网络访问可能需要多个配置步骤。通过仔细地检查每个配置和进行逐步的故障排查,我们可以成功地解决这类问题。

相关文章
|
1月前
|
编译器 Android开发
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
|
1月前
|
Java Android开发 Windows
玩转安卓之配置gradle-8.2.1
为安卓开发配置Gradle 8.2.1,包括下载和解压Gradle、配置环境变量、修改配置文件以增加国内镜像,以及在Android Studio中配置Gradle和JDK的过程。
73 0
玩转安卓之配置gradle-8.2.1
|
6月前
|
Android开发
Android网络访问超时
Android网络访问超时
55 2
|
6月前
|
存储 Java 开发工具
在Eclipse配置安装Android详细教程(新手)
在Eclipse配置安装Android详细教程(新手)
157 1
|
3月前
|
Android开发
Android 配置蓝牙遥控器键值
本文详细介绍了Android系统中配置蓝牙遥控器键值的步骤,包括查看设备号、配置键位映射文件(kl文件)、部署kl文件以及调试过程,确保蓝牙遥控器的按键能正确映射到Android系统对应的按键功能。
134 1
|
3月前
|
搜索推荐 Android开发
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
本文分享了不同价位电脑配置对于编译AOSP安卓系统源代码的影响,提供了从6000元到更高价位的电脑配置实例,并比较了它们的编译时间,以供学习AOSP源代码时电脑配置选择的参考。
236 0
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
|
3月前
|
Ubuntu Android开发
安卓系统调试与优化:(一)bootchart 的配置和使用
本文介绍了如何在安卓系统中配置和使用bootchart工具来分析系统启动时间,包括安装工具、设备端启用bootchart、PC端解析数据及分析结果的详细步骤。
191 0
安卓系统调试与优化:(一)bootchart 的配置和使用
|
3月前
|
XML 安全 Android开发
Flutter配置Android和IOS允许http访问
Flutter配置Android和IOS允许http访问
117 3
|
3月前
|
XML Android开发 UED
"掌握安卓开发新境界:深度解析AndroidManifest.xml中的Intent-filter配置,让你的App轻松响应scheme_url,开启无限交互可能!"
【8月更文挑战第2天】在安卓开发中,scheme_url 通过在`AndroidManifest.xml`中配置`Intent-filter`,使应用能响应特定URL启动或执行操作。基本配置下,应用可通过定义特定URL模式的`Intent-filter`响应相应链接。
112 12
|
3月前
|
移动开发 JavaScript 开发工具
Mac 10.9x下安装配置phonegap3.0开发环境 (涉及android sdk配置)
Mac 10.9x下安装配置phonegap3.0开发环境 (涉及android sdk配置)