Strawing Blog Archivers

Strawing Blog » Archivers » Android下打通RNDIS(USB网络共享)与WIFI热点

#此操作需root权限,没有的可以略过了
原始需求是这样的,需要连通一台没有无线网卡的台式机和一台没有以太网的笔记本(手头上也没有网线),正好手上有安卓手机(年度街机K30pro)和数据线,于是寻思用USB插台式机上开USB网络共享(RNDIS),然后开WIFI热点(Android上的interface为wlan1)给笔记本,组成一个局域网。可是发现这是两个独立的interface,rndis0的网段为192.168.42.0/24,wlan1的网段为192.168.43.0/24。而且在默认情况下,这两个网段竟然无法互访,之间没有路由
折腾的过程较为曲折,首先我尝试直接给iptables的FORWARD表加各种ACCEPT,不行,INPUT表OUTPUT表都加,都不行,甚至NAT都上了,还是不行。最后找到stackoverflow上的一个帖子,说iptables -F清空所有规则后可以,试了下还真行,可是把原先的规则清了,热点也没法正常上网了,甚至手机本身的网络都受影响了。
用iptables -nvL仔细看了下,并且用grep来划了下重点

iptables -nvL | grep --color -e "DROP" -e "wlan1" -e "rndis0" -e ^ 

发现在 tetherctrl_FORWARD表(这个表被FORWARD表引用)默认规则中直接被DROP掉了,这导致我之前在后面怎么插ACCEPT都没用。不太清楚官方的用意,为什么要DROP掉这些转发的流量,为了安全?(手机内部的热点,一切都在我的掌控之中能有什么不安全的嘛)



所以解决方案也很简单,把这调规则delete掉就好:

iptables -D tetherctrl_FORWARD -j DROP

之后192.168.43和42两个网段的机子(即USB连的台式机和连WIFI热点的笔记本)互相ping了下,能通了。
话说不知道是不是所有手机与热点有关的FORWARD表都叫tetherctrl_FORWARD,并且默认情况下都会被DROP掉。有没有别的网友帮验证一下,如果是的话,可以把这条命令做成一个App,一键解除RNDIS和WIFI热点间的路由限制

查看完整版本:Android下打通RNDIS(USB网络共享)与WIFI热点

© Strawing Blog

Supported by DHL Author:Wolfit