目的:只要插上树莓派就使PC全部流量通过派走代理

将树莓派打造成上级路由,在任意有可用wifi的地方,让PC全部流量走代理实现代理匿名效果 (通过网线当上级路由也可以,这里不多说,方法一样)

由于是树莓派zerow,所以只需要一根micro数据线即可供电+通讯,相当便携,不多说

刷固件的过程就不说了,需要这个的不会连固件都不会刷

首先需要将树莓派打造成虚拟网卡,顺带配置wifi信息


# 在boot根目录下的操作:

  1.编辑 config.txt 在最后新起一行写入

dtoverlay=dwc2

  2.编辑 cmdline.txt 找到 rootwite  在后边加入(注意,新加入的字段与前后本来有的字段之间有且只有一个空格)

modules-load=dwc2,g_ether

  3.新建一个文件,重命名为 ssh (没有任何的文件后缀名)

# 在 /etc/network/interfaces 加入内容(ip和子网掩码并不唯一,可自行更改):

allow-hotplug usb0
auto usb0
iface usb0 inet static
address 192.168.188.1
netmask 255.255.255.0

iface wlan0 inet dhcp
wpa_conf /etc/wpa_supplicant/wpa_supplicant.conf

# 配置wifi:

打开 /etc/wpa_supplicant/wpa_supplicant.conf  添加wifi信息,例子如下:

network={
ssid="wifiname"
key_mgmt=NONE
}

更多的配置规则看这位网友写的 Linux系统Wpa_supplicant用法小结


通过数据线连接好派(派连接在数据口)

如果被识别为串口设备请安装这个驱动 RPI Driver OTG.zip

直到这样子

手动配置一下ip

然后ssh连接到派 (putty,xshell,mobaxterm)

地址 192.168.188.1

默认用户名 pi  密码 raspberry


安装shadowsocks-libev

配置 /etc/ss-redir.json (具体配置自行更改,本地地址不要动)

{
  "server": "serverip",
  ,
  "password": "password",
  "local_address": "0.0.0.0",
  ,
  "method": "aes-256-cfb"
}

然后就是最重要的部分,配置iptables规则

python版ss可以加上 redsocks 来进行代理,python版功能比较落后,性能也没libev强大,对python版就不多说了,这里说libev自带的ss-redir

官方README里是这么写的

# Create new chain
iptables -t nat -N SHADOWSOCKS
iptables -t mangle -N SHADOWSOCKS

# Ignore your shadowsocks server's addresses
# It's very IMPORTANT, just be careful.
iptables -t nat -A SHADOWSOCKS -d 123.123.123.123 -j RETURN

# Ignore LANs and any other addresses you'd like to bypass the proxy
# See Wikipedia and RFC5735 for full list of reserved networks.
# See ashi009/bestroutetb for a highly optimized CHN route list.
iptables -t nat -A SHADOWSOCKS -d  -j RETURN
iptables -t nat -A SHADOWSOCKS -d  -j RETURN
iptables -t nat -A SHADOWSOCKS -d  -j RETURN
iptables -t nat -A SHADOWSOCKS -d  -j RETURN
iptables -t nat -A SHADOWSOCKS -d  -j RETURN
iptables -t nat -A SHADOWSOCKS -d  -j RETURN
iptables -t nat -A SHADOWSOCKS -d  -j RETURN
iptables -t nat -A SHADOWSOCKS -d  -j RETURN

# Anything else should be redirected to shadowsocks's local port
iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 

# Add any UDP rules
ip route add local default dev lo table
ip rule add fwmark  lookup
iptables -t mangle -A SHADOWSOCKS -p udp --dport  -j TPROXY --on-port  --tproxy-mark 0x01/0x01

# Apply the rules
iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS
iptables -t mangle -A PREROUTING -j SHADOWSOCKS

# Start the shadowsocks-redir
ss-redir -u -c /etc/config/shadowsocks.json -f /var/run/shadowsocks.pid

如果不需要非dns的udp流量的话这个也是很不错的选择,更改一下服务器地址

需要派本身走代理的话可以加上 sudo iptables -t nat -A OUTPUT -p tcp -j SHADOWSOCKS

不过总是有udp流量需求的(比如dota2),可以用这个规则

iptables -t nat -A PREROUTING -d SERVER_IP -j RETURN
iptables -t nat -A PREROUTING -d  -j RETURN
iptables -t nat -A PREROUTING -d  -j RETURN
iptables -t nat -A PREROUTING -d  -j RETURN
iptables -t nat -A PREROUTING -d  -j RETURN
iptables -t nat -A PREROUTING -d  -j RETURN
iptables -t nat -A PREROUTING -d  -j RETURN
iptables -t nat -A PREROUTING -d  -j RETURN
iptables -t nat -A PREROUTING -d  -j RETURN

iptables -t mangle -I PREROUTING -d SERVER_IP -j RETURN
iptables -t mangle -I PREROUTING -d  -j RETURN
iptables -t mangle -I PREROUTING -d  -j RETURN
iptables -t mangle -I PREROUTING -d  -j RETURN
iptables -t mangle -I PREROUTING -d  -j RETURN
iptables -t mangle -I PREROUTING -d  -j RETURN
iptables -t mangle -I PREROUTING -d  -j RETURN
iptables -t mangle -I PREROUTING -d  -j RETURN
iptables -t mangle -I PREROUTING -d  -j RETURN
iptables -t mangle -I PREROUTING -d  -j RETURN

iptables -t nat -A PREROUTING -p tcp -s 

ip rule add fwmark
ip route add local  dev lo table
iptables -t mangle -N SSUDP
iptables -t mangle -A SSUDP -p udp -j TPROXY --on-port  --tproxy-mark 0x01/0x01
iptables -t mangle -A PREROUTING -j SSUDP

更改红字部分即可,如果端口更改把端口也修改一下就好,windows下你可以使用 NatTypeTester 来验证你的udp流量是否被转发

为了便于调试,这是清除所有规则的命令(可以把ss-redir启动命令加上-v查看详细日志)

sudo iptables -F
sudo iptables -X
sudo iptables -Z
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT

由于iptables重启后是不保存规则的,我们可以用类似 iptables-persistent 的软件,也可以和我一样直接把规则命令写入开机事件,我觉得这样更便于调试

设置开机启动(写在exit 0之前),写在/etc/rc.local

# 改mac地址(需要的话)
sudo macchanger -A wlan0

# 开启wifi并按照配置连接
sudo ifup wlan0

#设置nat链直连地址
sudo iptables -t nat -A PREROUTING -d SERVER_IP -j RETURN
 -j RETURN
 -j RETURN
 -j RETURN
 -j RETURN
 -j RETURN
 -j RETURN
 -j RETURN
 -j RETURN

#设置mangle链直连地址
sudo iptables -t mangle -I PREROUTING -d SERVER_IP -j RETURN
 -j RETURN
 -j RETURN
 -j RETURN
 -j RETURN
 -j RETURN
 -j RETURN
 -j RETURN
 -j RETURN
 -j RETURN

#设置转发

#设置udp

 dev lo table
sudo iptables -t mangle -N SSUDP
 --tproxy-mark 0x01/0x01
sudo iptables -t mangle -A PREROUTING -j SSUDP

# 启动 ss-redir
sudo ss-redir -c /etc/ss-redir.json -u

现在,在配置过wifi信息的信号范围内,只要插上派,系统会自动识别网卡,所有流量都通过派进行转发代理

说伪路由是因为只能直连本机,但可以电脑同时开一个热点给其他设备用,有一样的效果

后记:

我在上篇一根线玩转树莓派中建议大家将派的地址设置为192.168.137.*,是因为PC分享网络时,会将目标网卡ip地址强行设置为192.168.137.1,为方便才这样设置ip

写本文的时候发现,电脑在建立无线热点时会把热点网卡的本机ip也设置为192.168.137.1,如果你并不需要派通过本机上网,为避免冲突,建议你把ip设置为其他网段(例如本文的192.168.188.*)

然后就是在实际使用中可能出现网络一网络二到网络N的情况,你可以不管它也可以删除,在注册表(regedit)的

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\profile\

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\Unmanaged\

你可以把子内容全部删除,也可以删除你想删除的网络N,立即重启,重启后稍微等等就好

写个reg脚本可以方便一点

Windows Registry Editor Version 5.00
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\profiles]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\Unmanaged]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\profiles]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\Unmanaged]

博客园  一根数据线打造PC流量代理伪路由器 (树莓派zero w)

enjoy it


一根数据线将zero w打造成上级代理路由的更多相关文章

  1. windows下一根数据线玩转树莓派zero(w)

    买了个树莓派zero w,想着用一根普通micro数据线达成 供电+ssh+通过usb共享网络+远程桌面 的目标 通过用静态ip免去了用benjour的连接不稳定方法,下面开始细说 需要的硬件: 树莓 ...

  2. 一根数据线玩转树莓派Zero

    0. 前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 本文使用Markdown写成,为获得更好的阅读体验和正常的链接.图片显示,请访问我的博客原文: http://www.cnb ...

  3. 树莓派 Zero W——随身钥匙扣

    前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 本文使用Markdown写成,为获得更好的阅读体验和正确的格式显示,请访问我的博客原文: http://www.cnblogs.c ...

  4. 软件测试---测试模型(V、W、H)

    一.V测试模型 1.V模型示意图: 单元测试:又叫模块测试,针对软件设计中的最小单位—>程序模块 集成测试:又叫组装测试,通常在单元测试的基础上,将所有程序模块进行有序.递增测试. 系统测试:把 ...

  5. USB数据线 单独供电

    USB数据线上剪掉两个电源线,只保留两个是数据就无法传数据了.数据线传输数据需要通过芯片来进行数据交换,芯片的工作离不开电源,没有电源,芯片无法工作,当然也就无法传输数据了.电源线特别是负极线,同时还 ...

  6. I2C 基础原理详解

    今天来学习下I2C通信~ I2C(Inter-Intergrated Circuit)指的是 IC(Intergrated Circuit)之间的(Inter) 通信方式.如上图所以有很多的周边设备都 ...

  7. php易混淆知识点

    一.define(“constant”,  “hello world”);和const constant = “hello world”;的区别? (0).使用const使得代码简单易读,const本 ...

  8. windows 花式装系统

    目录 一.安装系统前准备 准备U盘 准备好一个制作启动盘的软件 准备系统镜像 二.接下来先制作启动盘(以微PE为例) 三.插上u盘,调BIOS(BIOS即基本输入输出系统) 四.进入PE 五.开始安装 ...

  9. IIC总线协议

    前言:年前给老师做个红外抄表系统,,现在对当中用到的一些模块总结一下. 1.只有在总线空闲时才允许启动数据传送. 2.在数据传送过程中,当时钟线为高电平时,数据线必须保持稳定状态,不允许有跳变.时钟线 ...

随机推荐

  1. python字典操作和内置方法

    一 字典基本介绍 python中只有字典是映射结构,通过key取值,并且key是不可变数据类型,而value可以是任意数据类型. 字典通过一个花括号,里面存放key:value的数据结构来定义.理论上 ...

  2. Web前端基础——jQuery(三)

    本文主要从以下几方面介绍jQuery应用中的内容: 1 jQuery 节点遍历2 jQuery 中的过滤器3 jQuery 属性操作4 jQuery Dom节点操作5 几个jQuery例子6 jQue ...

  3. Java的第6天,学习运算符

    提到运算符我们就会想起 加 减 乘 除: Java中的一些运算符:关系运算符.逻辑运算符.赋值运算符.和条件运算符: 其中算术运算符有:+ , - , * , \, % ,++, -- ; + , - ...

  4. 在使用vue-cli中遇到的几个问题

    前言:框架没有好坏之分,能解决需求就可以.之前没事用vue模仿过BOSS直聘App(纯属娱乐),实际工作中开发过一个后台管理系统,遇到过不少坑,终于闲下来稍微总结几个问题分享一下! 一.所遇到的问题( ...

  5. UdPloyer交付系统设计思路

    宏观愿景: 一键搞定项目依赖环境,将软件交付过程管理化,实现DevOps研发测试运维一体化. 一.一站式版本交付生命周期管理  业务线[私有权限] 1.SVN源码交付 合主干.版本归档.拉分支.版本回 ...

  6. 利用python和shell脚本生成train.txt的标签文件

    1. 用shell脚本生成带绝对路径的train.txt 例如我要生成如下形式的带标签的文件,如图:(如有两个标签:0 和 1) shell脚本如下: 这样标签0写入了train.txt # /usr ...

  7. 根据需要扩展java中的ThreadPoolExecutor

    经常被重写的三个方法 ThreadPoolExecutor是可扩展的,通过查看源码可以发现,它提供了几个可以在子类化中改写的方法:beforeExecute,afterExecute,terminat ...

  8. Python 基于urllib.request封装http协议类

    基于urllib.request封装http协议类 by:授客QQ:1033553122 测试环境: Python版本:Python 3.3   代码实践 #!/usr/bin/env python ...

  9. Rxjava学习(二操作符)

    操作符是为了解决对Observable对象的变换的问题,操作符用于在Observable和最终的Subscriber之间修改Observable发出的事件 1.filter filter()操作符是可 ...

  10. 跨站请求伪造(CSRF)

    1. 什么是跨站请求伪造(CSRF)  CSRF(Cross-site request forgery跨站请求伪造,也被称为“One Click Attack”或者session Riding,通常缩 ...