# 手机HTTP代理群组 **Repository Path**: wspApp/mobile-http-proxy-group ## Basic Information - **Project Name**: 手机HTTP代理群组 - **Description**: 把破旧的安卓手机合理运用起来,打造一个私人的IP库 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2024-12-02 - **Last Updated**: 2025-06-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 手机HTTP代理群组 #### 介绍 把破旧的安卓手机合理运用起来,打造一个私人的IP库 #### 软件架构 该架构使用到了 openvpn以及一个叫every proxy的android应用。 通过openvpn的tun模式组建虚拟专用局域网,通过openvpn可以把分布在各地的手机组成一个局域网,手机加入后不改变原有的网络出口网关。 需要使用时,将电脑也接入专用网,就可以通过局域网IP连接手机上的http proxy服务,从而实现代理上网。如果想将http proxy服务暴露在公网上,可以使用frp实现内网穿透。 #### 安装教程 1. 准备一台有公网IP的服务器 2. 在服务器上安装好openvpn服务端,并生成CA证书,以及客户端用的ovpn文件 [openvpn安装教程](http://babamumu.com/archives/openvpn) 3. 手机上安装好openvpn客户端,以及every proxy应用 [every proxy下载](https://rj.xiaopi.com/download/25515.html) 4. 把两个APP应用加入电池优化白名单,或者让手机永不锁屏,保证APP的正常运行 5. 电脑安装openvpn客户端,填入对应手机的局域网IP+端口实现代理上网 #### 常见问题 1. openvpn的server.conf配置说明 ``` #local 123.123.123.123 #指定监听的本机IP(因为有些计算机具备多个IP地址),该命令是可选的,默认监听所有IP地址 port 1194 #服务端端口号 proto tcp #通过tcp协议来连接,也可以通过udp dev tun #路由模式,注意windows下必须使用dev tap tun ca /etc/openvpn/ca.crt #ca证书存放位置 cert /etc/openvpn/server.crt #服务器证书存放位置 key /etc/openvpn/server.key # #服务器密钥存放位置 dh /etc/openvpn/dh.pem #dh.pem存放位置 tls-auth /etc/openvpn/ta.key 0 #ta.key存放位置 server 10.19.0.0 255.255.255.0 #虚拟局域网网段设置 #ifconfig-pool-persist /etc/openvpn/ipp.txt #存放当前接入的用户名和分配的局域网网段 client-config-dir /etc/openvpn/ccd #通过该配置固定客户端的IP client-to-client #开启客户端互访 # duplicate-cn #支持一个证书多个客户端登录使用,建议不启用 keepalive 10 120 cipher AES-128-CBC #comp-lzo max-clients 100 #最大客户端并发连接数量 user nobody group nobody persist-key persist-tun status openvpn-status.log #由Openvpn自动维护,显示当前接入的客户端信息,包括客户端的CA证书的CN名、局域网IP、公网IP和连接端口 verb 3 log /var/log/openvpn/openvpn.log log-append /var/log/openvpn/openvpn.log ``` 2. 如何固定客户端的IP地址 比如我想固定用户m59的IP为10.19.0.59 在 /etc/openvpn/ccd目录下创建一个叫 m59的文件,并输入 ``` ifconfig-push 10.19.0.59 10.19.0.60 ``` 生成CA证书及ovpn配置文件 ``` # ! /bin/bash set -e OVPN_USER_KEYS_DIR=/etc/openvpn/client/keys EASY_RSA_DIR=/etc/openvpn/easy-rsa/ PKI_DIR=$EASY_RSA_DIR/pki for user in "$@" do if [ -d "$OVPN_USER_KEYS_DIR/$user" ]; then rm -rf $OVPN_USER_KEYS_DIR/$user rm -rf $PKI_DIR/reqs/$user.req sed -i '/'"$user"'/d' $PKI_DIR/index.txt fi cd $EASY_RSA_DIR # 生成客户端SSL证书文件 ./easyrsa build-client-full $user nopass # 整理下生成的文件 mkdir -p $OVPN_USER_KEYS_DIR/$user cp $PKI_DIR/ca.crt $OVPN_USER_KEYS_DIR/$user/ # CA 根证书 cp $PKI_DIR/issued/$user.crt $OVPN_USER_KEYS_DIR/$user/ # 客户端证书 cp $PKI_DIR/private/$user.key $OVPN_USER_KEYS_DIR/$user/ # 客户端证书密钥 cp /etc/openvpn/client/sample.ovpn $OVPN_USER_KEYS_DIR/$user/$user.ovpn # 客户端配置文件 sed -i 's/client.crt/'"$user".crt'/g' $OVPN_USER_KEYS_DIR/$user/$user.ovpn sed -i 's/client.key/'"$user".key'/g' $OVPN_USER_KEYS_DIR/$user/$user.ovpn cp $EASY_RSA_DIR/ta.key $OVPN_USER_KEYS_DIR/$user/ta.key # auth-tls 文件 cd $OVPN_USER_KEYS_DIR zip -r $user.zip $user done exit 0 ``` 保存为 ovpn_user.sh 执行上面脚本创建一个叫m59用户:sh ovpn_user.sh m59,会在 /etc/openvpn/client/keys 目录下生成以用户名命名的 zip 打包文件,将该压缩包下载到本地解压,即可加载到客户端使用。 3. 如何获取所有接入的客户端列表 以下是用PHP写的一个格式化openvpn-status.log内容的方式 ``` $log = file_get_contents("/etc/openvpn/openvpn-status.log"); $start = strpos($log,"ROUTING TABLE") + 14; $len = strpos($log,"GLOBAL STATS") - $start - 1; $body = substr($log,$start,$len); $lines = explode("\n",$body); $lists = []; foreach($lines as $key => $line){ if($key == 0){ continue; } $arr = explode(",",$line); //忽略证书名为pc的连接,因为PC是电脑接入VPN时使用的账号,但本身不提供PROXY服务,所以过滤掉 if($arr[1] == "pc"){ continue; } list($public_ip) = explode(":",$arr[2]); $right = [ 'name' => $arr[1], 'IP' => $arr[0], 'port' => '8080', 'public' => $public_ip, 'online' => date("Y-m-d H:i:s",strtotime($arr[3])) ]; $lists[] = $right; } ``` 4. 在手机端导入ovpn文件时,提示缺少证书 导入ovpn文件时,要使用多选,将同目录下的 crt、key等文件都选中后再导入 5. 如何内网穿透 使用frp实现 [frp download](https://github.com/fatedier/frp/releases) ``` # frps.ini [common] bind_port = 7000 dashboard_user = root dashboard_pwd = passwd dashboard_port = 7100 # http://x.x.x.x:7100可以看到frp的运行状态 token = 666666 #使用时建议更换复杂的token ``` 启动frp服务 ./frps -c ./frps.ini 将手机m59的代理服务暴露在公网中可以在服务端上运行 ./frpc -c ./frpc_m59.ini 之后就可以通过 x.x.x.x:8001 进行代理上网 ``` # frpc_m59.ini [common] server_addr = x.x.x.x server_port = 7000 token = 666666 #使用时建议更换复杂的token [m59] type = tcp local_ip = 10.19.0.59 local_port = 8080 remote_port = 8001 ``` 只是单纯的想让服务器实现代理,可以这样实现 ``` # frpc_http_proxy.ini [common] server_addr = x.x.x.x server_port = 7000 token = 666666 #使用时建议更换复杂的token [home] type = tcp remote_port = 8002 plugin = http_proxy plugin_http_user = name plugin_http_passwd = passwd ``` 运行 ./frpc -c ./frpc_http_proxy.ini 之后就可以通过 x.x.x.x:8002 进行代理上网