昨天完成了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,需要通过图形界面或命令行来设置默认网关:
- 打开“控制面板”。
- 选择“网络和共享中心”。
- 在左侧,点击“更改适配器设置”。
- 右键点击网络连接(可能是“以太网”或类似名称),然后选择“属性”。
- 在列表中找到并双击“Internet 协议版本 4 (TCP/IPv4)”。
- 选择“使用下面的IP地址”并输入你的IP地址、子网掩码。在“默认网关”中,输入
192.168.52.2
。 - 点击“确定”保存设置。
#执行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
待解决和疑问:
- RK 3568 Android去ping PC是ping不通的?
- PC去ping RK3568ping不通的?
- 实现Android系统接口完成配置双网卡上网规则。
以上坑等我有时间搞完再补充
总结:
为连接到Android主机的设备提供网络访问可能需要多个配置步骤。通过仔细地检查每个配置和进行逐步的故障排查,我们可以成功地解决这类问题。