目标创建一个代理网关,所有通过有线或者无线连接通过该网关上网的设备可以: - 根据域名判断是走国内的DNS还是国外的DNS,走国外DNS时,通过SS代理请求,防止DNS污染
- 根据目标IP地址自动选择线路,国外流量都走SS代理
准备- 一个SS服务器,Linode或者Digital Ocean上5刀/月的服务器就够用了,SS服务器的架设方法请自行百度。
- 一个运行最新版本Raspbian的树莓派3B+。理论上任何安装Linux并带有线网卡和无线网卡的设备都可以,只是不同的Linux发行版配置会稍有不同。选择树莓派3B+因为其自带有线和无线网卡,官方的Raspbian运行稳定、内核版本高(ipset在低版本内核中很难安装),缺点是网卡不是千兆的。我在KVM虚拟机中运行的Arch和Orange Pi Zero Plus上运行的Armbian上都成功搭建过类似的网关。
- 一个支持VLAN Tagging(802.1Q)功能的交换机。我用的是必联BL-SG108M,八口千兆,淘宝卖140,价格公道,功能够用。也可以使用一个USB有线网卡配一个普通的交换机,除VLAN之外,其他配置类似,但这种配置就不是单臂路由器了。
网络拓扑与交换机配置
网络拓扑图 将交换机端口分为两个VLAN,VLAN2和VLAN3(这个设备很诡异,VLAN1不允许删除或修改)。端口1至端口6为VLAN2,端口6至端口8为VLAN3,交换机通过端口1连接家里的路由器,树莓派连接端口6(跨两个VLAN)。此时,空闲的端口2~5为非代理端口,直接走家里的路由器,端口7、8为代理端口,数据会通过树莓派网关进行转发,可以根据需要调整VLAN2与VLAN3的端口数量。 配置网关树莓派网关需要运行DNS服务(dnsmasq),代理服务(shadowsocks-libev)及无线AP服务(hostapd)并且需要通过iptables和ipset进行NAT转发。 系统配置更新系统到最新的状态: 1
2
| apt update
apt dist-upgrade -y
|
安装需要的软件包: 1
| apt install -y vim git dnsutils lsof bridge-utils hostapd dnsmasq ipset ntp haveged python-m2crypto shadowsocks-libev
| SS服务SS全家桶客户端一共有三个服务: - shadowsocks-libev-local:socks5正向代理服务,非代理VLAN中的终端可以通过这个socks5代理上网,配合Proxychains与Switch Omega这类的软件使用。
- shadowsocks-libev-redir:socks5透明代理服务,所有需要代理的网路流量都会根据iptables规则转发到这个服务的监听端口。
- shadowsocks-libev-tunnel:本地端口转发工具,这里用于解决dns污染问题。
DNS服务很多的大型网站,在国内外会提供不同的版本,如果我们都用国外的DNS来解析,可能会看到非中国的版本或者被解析到国外的服务器而影响浏览速度。所以需要使用一个列表来指定所有的国内网站走国内的DNS。 树莓派3B+的无线网卡支持2.4G与5G模式,这里使用的是2.4G模式,以确保最好的兼容性(hw_mode=g),无线网络的名称为SS,密码为ssproxy1234,可以根据需要自行修改,另外也要注意频段最好避开家里路由器的频段,这里的频段是7(channel=7)。
总结全部配置完成后,重启树莓派,终端通过网线连接交换机的7、8口,或者连接名称为SS的无线网络,都可以自动的代理上网了。
|