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

![Windows PC网络设置]

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
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值