Total Pageviews

Saturday, 17 August 2019

linux桌面系统上的透明代理/全局代理: ss-tun2socks

利用 tun 虚拟网卡,全局透明代理 tcp + udp。

脚本依赖

  • iproute2 工具
  • iptables + ipset 工具
  • curl 用于获取大陆地址段列表
  • haveged 解决系统熵过低的问题(可选,但建议)
  • 本地 socks5 代理(SS、SSR),需支持 UDP Relay
  • chinadns,自带 x86x64armarm64 可执行文件
  • dnsforwarder,自带 x86x64armarm64 可执行文件
  • gotun2socks,自带 x86x64armarm64mipsmips64 可执行文件

脚本用法

获取
  • git clone https://github.com/zfl9/ss-tun2socks.git
安装
  • cd ss-tun2socks/
  • cp -af ss-tun2socks /usr/local/bin/
  • cp -af tun2socks/tun2socks.ARCH /usr/local/bin/tun2socks(注意 ARCH)
  • cp -af chinadns/chinadns /usr/local/bin/(仅适用于 x64)
  • cp -af dnsforwarder/dnsforwarder /usr/local/bin/(仅适用于 x64)
  • chmod 0755 /usr/local/bin/ss-tun2socks
  • chmod 0755 /usr/local/bin/tun2socks
  • chmod 0755 /usr/local/bin/chinadns
  • chmod 0755 /usr/local/bin/dnsforwarder
  • mkdir -p /etc/tun2socks/
  • cp -af ss-tun2socks.conf /etc/tun2socks/
  • cp -af ipset/chnroute.ipset /etc/tun2socks/
  • cp -af chinadns/chnroute.txt /etc/tun2socks/
  • cp -af dnsforwarder/dnsforwarder.conf /etc/tun2socks/
或者使用 ./install.sh 安装这些文件,目前只支持 x64 平台(后续会添加其它平台的支持)。
配置
  • vim /etc/tun2socks/ss-tun2socks.conf,修改开头的 socks5 配置
  • socks5_listen="127.0.0.1:1080":socks5 监听地址,一般为 1080 端口。
  • socks5_remote="node.proxy.net":SS/SSR 服务器的 Hostname/IP,注意修改。
  • socks5_runcmd="nohup ss-local -c /etc/ss-local.json -v < /dev/null &>> /var/log/ss-local.log &"
    启动 SS/SSR 的命令,此命令必须能够后台运行(即:不能占用前台)。
    service [service-name] startsystemctl start [service-name] 等。
自启(Systemd)
  • cp -af ss-tun2socks.service /etc/systemd/system/
  • systemctl daemon-reload
  • systemctl enable ss-tun2socks.service
自启(SysVinit)
  • touch /etc/rc.d/rc.local
  • chmod +x /etc/rc.d/rc.local
  • echo "/usr/local/bin/ss-tun2socks start" >> /etc/rc.d/rc.local
配置 ss-tun2socks 开机自启后容易出现一个问题,那就是必须再次运行 ss-tun2socks restart 后才能正常代理(这之前查看运行状态,可能看不出任何问题,都是 running 状态),这是因为 ss-tun2socks 启动过早了,且 socks5_remote 为 Hostname,且没有将 socks5_remote 中的 Hostname 加入 /etc/hosts 文件而导致的。因为 ss-tun2socks 启动时,网络还没准备好,此时根本无法解析这个 Hostname。要避免这个问题,可以采取一个非常简单的方法,那就是将 Hostname 加入到 /etc/hosts 中,如 Hostname 为 node.proxy.net,对应的 IP 为 11.22.33.44,则只需执行 echo "11.22.33.44 node.proxy.net" >> /etc/hosts。不过得注意个问题,那就是假如这个 IP 变了,别忘了修改 /etc/hosts 文件哦。
用法
  • ss-tun2socks help:查看帮助
  • ss-tun2socks start:启动代理
  • ss-tun2socks stop:关闭代理
  • ss-tun2socks restart:重启代理
  • ss-tun2socks status:运行状态
  • ss-tun2socks current_ip:查看当前 IP(一般为本地 IP)
  • ss-tun2socks flush_dnsche:清空 dns 缓存(dnsforwarder)
  • ss-tun2socks update_chnip:更新大陆地址段列表(ipset、chinadns)

相关参考

from https://github.com/wxlg1117/ss-tun2socks
----------------------------

ss-local 全局透明代理 (tun网卡 + tun2socks)

tun2socks 透明代理

脚本依赖

  • 脚本依赖 - 安装参考
  • curl,获取大陆地址段列表
  • ipset,保存大陆地址段列表
  • iproute2,配置策略路由,透明代理
  • haveged,防止系统出现熵过低的问题
  • pdnsd,支持永久性缓存的 DNS 代理服务器
  • chinadns,利用大陆地址段列表实现 DNS 分流
  • SS、SSR 或其它支持 UDP Relay 的 socks5 代理

端口占用

请检查是否有端口被占用,如果有请自行解决!
  • pdnsd:0.0.0.0:53/udp
  • chinadns:0.0.0.0:65353/udp

脚本用法

获取
  • git clone https://github.com/zfl9/ss-tun2socks.git
安装
  • cd ss-tun2socks
  • cp -af ss-tun2socks /usr/local/bin/
  • cp -af tun2socks.bin/tun2socks.ARCH /usr/local/bin/tun2socks(先解压,注意 ARCH)
  • chown root:root /usr/local/bin/tun2socks /usr/local/bin/ss-tun2socks
  • chmod +x /usr/local/bin/tun2socks /usr/local/bin/ss-tun2socks
  • mkdir -m 0755 -p /etc/tun2socks
  • cp -af pdnsd.conf /etc/tun2socks/
  • cp -af chnroute.txt /etc/tun2socks/
  • cp -af chnroute.ipset /etc/tun2socks/
  • cp -af ss-tun2socks.conf /etc/tun2socks/
  • chown -R root:root /etc/tun2socks
  • chmod 0644 /etc/tun2socks/*
配置
  • vim /etc/tun2socks/ss-tun2socks.conf,修改开头的 socks5 配置
  • socks5_listen="127.0.0.1:1080":socks5 监听地址,一般为 1080 端口。
  • socks5_remote="node.proxy.net":SS/SSR 服务器的 Hostname/IP,注意修改。
  • socks5_runcmd="nohup ss-local -c /etc/ss-local.json < /dev/null &>> /var/log/ss-local.log &"
    启动 SS/SSR 的命令,此命令必须能够后台运行(即:不能占用前台)。
    如 service [service-name] startsystemctl start [service-name] 等。
  • chinadns_upstream="114.114.114.114,8.8.8.8":建议将 114 替换为原网络下的 DNS
  • iptables_intranet=(192.168.0.0/16):如果内网网段不是 192.168/16,请修改(多个使用空格隔开)
  • dns_original=(114.114.114.114 119.29.29.29 180.76.76.76):建议修改为原网络下的 DNS(最多 3 个)
自启(Systemd)
  • cp -af ss-tun2socks.service /etc/systemd/system/
  • systemctl daemon-reload
  • systemctl enable ss-tun2socks.service
自启(SysVinit)
  • touch /etc/rc.d/rc.local
  • chmod +x /etc/rc.d/rc.local
  • echo "/usr/local/bin/ss-tun2socks start" >> /etc/rc.d/rc.local
配置 ss-tun2socks 开机自启后容易出现一个问题,那就是必须再次运行 ss-tun2socks restart 后才能正常代理(这之前查看运行状态,可能看不出任何问题,都是 running 状态),这是因为 ss-tun2socks 启动过早了,且 socks5_remote 为 Hostname,且没有将 socks5_remote 中的 Hostname 加入 /etc/hosts 文件而导致的。因为 ss-tun2socks 启动时,网络还没准备好,此时根本无法解析这个 Hostname。要避免这个问题,可以采取一个非常简单的方法,那就是将 Hostname 加入到 /etc/hosts 中,如 Hostname 为 node.proxy.net,对应的 IP 为 11.22.33.44,则只需执行 echo "11.22.33.44 node.proxy.net" >> /etc/hosts。不过得注意个问题,那就是假如这个 IP 变了,别忘了修改 /etc/hosts 文件哦。命令行获取某个域名对应的 IP 地址的方法:dig +short HOSTNAME
用法
  • ss-tun2socks help:查看帮助
  • ss-tun2socks start:启动代理
  • ss-tun2socks stop:关闭代理
  • ss-tun2socks restart:重启代理
  • ss-tun2socks status:运行状态
  • ss-tun2socks current_ip:查看当前 IP(一般为本地 IP)
  • ss-tun2socks flush_dnsche:清空 dns 缓存(pdnsd 的缓存)
  • ss-tun2socks update_chnip:更新大陆地址段列表(ipset、chinadns)
日志
如需详细日志,请打开 ss-tun2socks.conf 中相关的 verbose 选项。
  • pdnsd:/var/log/pdnsd.log
  • chinadns:/var/log/chinadns.log
  • tun2socks:/var/log/tun2socks.log

相关参考


-----------------------------------------

实现Linux下的全局翻墙.

一、简介

实现Linux下的全局翻墙,使用redsocks配合iptables实现请求流量的转发
有的时候在实验环境中下载一些被GFW给墙掉的资源会出现下载不到的情况,好在网上有大神使用C写了一个库可以将将本地的流量从一个端口转向Socket5的端口,我们再使用一个SSH -D参数本地启动一个Socket5端口,使用redsocks将流量转到对应的Socket5上。这样就是就可以实现任何流量都可以翻墙了,由于官方的redsocks并没有提供iptables的配置方法,所以我写了一个脚本,自动的读取配置文件啥的,帮助快速使用。
感谢大神的项目,详细参见此处Github主页

一、使用方法

本人已经针对redsocks的一个稳定版本编译好了一个直接可以运行的二进制文件,在Centos上可以直接使用。如果想编译其他Linux版本上的请按照redsocks官方文档操作
  1. 使用前请安装依赖包 如果是Centos操作系统
Shell> yum install libevent libevent-devel
如果是Ubuntu操作系统
Shell> sudo apt-get install libevent-2.0-5 libevent-dev
  1. 启动myredsocks
Shell > ./myredsocks.sh start #启动服务进程
start the redsocks........................
please tell me you sock_server:127.0.0.1 #输入socket5代理服务器的地址
please tell me you sock_port:7070        #输入socket5代理服务器的端口
  1. 选择代理模式
全局代理模式
./myredsocks.sh proxyall      #启动全局代理模式,此模式下将代理所有的访问
please tell me you network:192.168.188.0/24             #输入你当前主机的网络信息,因为该网段的机器是不需要翻墙访问的
 your iptabls OUTPUT chain like this.... 
 Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 num   pkts bytes target     prot opt in     out     source               destination         

 Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 num   pkts bytes target     prot opt in     out     source               destination         

 Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 num   pkts bytes target     prot opt in     out     source               destination         
 1        0     0 RETURN     tcp  --  *      *       0.0.0.0/0            192.168.188.0/24    
 2        0     0 RETURN     tcp  --  *      *       0.0.0.0/0            127.0.0.1           
 3        0     0 RETURN     tcp  --  *      *       0.0.0.0/0            127.0.0.1           
 4        0     0 REDIRECT   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            redir ports 12345

 Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 num   pkts bytes target     prot opt in     out     source               destination  
代理指定主机
该模式下只代理GFlist.txt中指定的主机
Shell> ./myredsocks.sh proxy
please tell me you network:192.168.188.0/24   #输入你的网络信息,同全局代理模式一样,同网段的机器不要翻墙
this ip[216.58.194.99] will use proxy connected .... 
this ip[180.97.33.107] will use proxy connected .... 
your iptabls OUTPUT chain like this.... 
   Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
   num   pkts bytes target     prot opt in     out     source               destination         

   Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
   num   pkts bytes target     prot opt in     out     source               destination         

   Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
   num   pkts bytes target     prot opt in     out     source               destination         
   1        0     0 RETURN     tcp  --  *      *       0.0.0.0/0            192.168.188.0/24    
   2        0     0 RETURN     tcp  --  *      *       0.0.0.0/0            127.0.0.1           
   3        0     0 RETURN     tcp  --  *      *       0.0.0.0/0            127.0.0.1           
   4        0     0 REDIRECT   tcp  --  *      *       0.0.0.0/0            216.58.194.99        redir ports 12345
   5        0     0 REDIRECT   tcp  --  *      *       0.0.0.0/0            180.97.33.107        redir ports 12345

   Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
   num   pkts bytes target     prot opt in     out     source               destination   
  1. 清理代理与关闭代理
Shell> ./myredsocks.sh clean                  #清理所有的代理模式
Shell> ./myredsocks.sh stop                   #关闭代理
from https://github.com/liuwenru/intelliq-redsocks
------------------------------------------

https://github.com/shouldsimple/linux-global-proxy
https://github.com/hiyoi/fifa
https://github.com/jm33-m0/w411brk
https://github.com/LiamHaworth/go-tproxy