当前位置: 首页 > news >正文

ubuntu 用ss-TPROXY实现透明代理,基于TPROXY的透明TCP/UDP代理,在 Linux 2.6.28 后进入官方内核。

TPROXY 是一个 Linux 内核模块,在 Linux 2.6.28 后进入官方内核。

1 安装 tproxy 相关依赖

参考ss-tproxy 的安装依赖。

  • bash

ss-tproxy 使用了 bash 的一些语法特性,比如 shell 数组,因此必须用 bash 解释器执行。大多数发行版已经自带了 bash;如果没有,请先安装一个 bash,比如那些基于 busybox 的系统。如果可以通过包管理器安装 bash,那最好;如果不行,可以看看上面两个链接,取出里面的 bash 二进制文件。

    https://github.com/robxu9/bash-statichttps://packages.debian.org/sid/bash-static
  • curl

请检查 curl 是否支持 HTTPS 协议,使用 curl --version 可查看(Protocols)

apt -y install curl
  • ipset
apt -y install ipset
  • TPROXY

TPROXY 是一个 Linux 内核模块,在 Linux 2.6.28 后进入官方内核。一般正常的发行版都没有裁剪 TPROXY 模块,TPROXY 模块缺失问题主要出现在无线路由固件上(某些精简型发行版也会去掉 TPROXY 模块,比如 Alpine)。使用以下方法可以检测当前内核是否包含 TPROXY 模块。

# 查找 TPROXY 模块
find /lib/modules/$(uname -r) -type f -name 'xt_TPROXY.ko*'# 正常情况下的输出
/lib/modules/4.16.8-1-ARCH/kernel/net/netfilter/xt_TPROXY.ko.xz# 尝试手动加载模块
modprobe xt_TPROXY
  • iproute2

大部分发行版都自带了 iproute2,可以运行一下 ip addr 命令,如果成功打印了网络接口的 ip,那就是已安装。

apt -y install iproute2
  • dnsmasq
apt -y install dnsmasq
  • chinadns-ng

chinadns-ng 是用 C 语言编写的另一个 chinadns,修复若干问题,优化了性能。

可以直接在 releases 页面下载编译好的二进制文件。然后复制到/usr/local/bin,参考命令 cp -af xxx /usr/local/bin/xxx
https://github.com/zfl9/chinadns-ng
  • dns2tcp

dns2tcp 是用 C 语言写的小工具,专做 dns udp2tcp 转换。

可以直接在 releases 页面下载编译好的二进制文件。然后复制到/usr/local/bin,参考命令 cp -af xxx /usr/local/bin/xxxhttps://github.com/zfl9/dns2tcp
  • ipt2socks

ipt2socks 是用 C 语言写的小工具,专做 iptables-to-socks5 转换。

可以直接在 releases 页面下载编译好的二进制文件。然后复制到/usr/local/bin,参考命令 cp -af ipt2socks /usr/local/bin/ipt2socks
https://github.com/zfl9/ipt2socks

用systemd运行Trojan服务trojan.service
/etc/systemd/system/trojan.service

[Unit]
Description=trojan-service[Service]
ExecStart=/usr/bin/trojan /etc/trojan/config.json
Restart=on-failure
RestartSec=60
SyslogIdentifier=trojan-service
User=root[Install]
WantedBy=multi-user.target

2 配置SOCKS5 服务

可以采用一些工具,如果你有云服务器,可以在云服务部署SOCKS5,通过云服务器达到保护隐私的目的。例如采用这个软件:
https://p4gefau1t.github.io/trojan-go,更详细,我就不说了,免得文章被屏蔽

3 用ss-TPROXY

   普通代理:client 实现的是 http、socks5 传入协议。透明代理:client 实现的是 透明代理 传入协议。

如果 client 端只支持 socks5 传入,不支持透明代理传入,还能实现透明代理吗?当然可以,我们可以运行 ipt2socks,实现TCP 支持 TPROXY/REDIRECT 传入,UDP 支持 TPROXY 传入。ipt2socks 是【https://github.com/zfl9】编写的一个简单 C 程序

搭配 TPROXY:支持 TCP 和 UDP 协议的透明代理。

我采用了工具ss-tproxy,

获取
git clone https://github.com/zfl9/ss-tproxy
cd ss-tproxy
chmod +x ss-tproxy安装
cp -af ss-tproxy /usr/local/bin
mkdir -p /etc/ss-tproxy
cp -af *.conf *.txt *.ext /etc/ss-tproxy
cp -af ss-tproxy.service /etc/systemd/system # 可选,安装 service 文件卸载
# 停止脚本 (v4.7版本开始)
ss-tproxy stop
ss-tproxy flush-stoprule
# 删除文件
rm -fr /usr/local/bin/ss-tproxy # 删除脚本
rm -fr /etc/ss-tproxy # 删除配置(做好备份)
rm -fr /etc/systemd/system/ss-tproxy.service # service文件脚本开机自启
将 ss-tproxy.service 文件放到 /etc/systemd/system/ss-tproxy.service,执行:
systemctl daemon-reload
systemctl enable ss-tproxy

配置文件

首先是 第二节的 2 配置SOCKS5 服务 ,更详细,我就不说了,免得文章被屏蔽
其次 ss-TPROXY 的配置,参考 https://github.com/zfl9/ss-tproxy 的代理软件配置,说实话,难度比较大,需要具备看懂shell脚本的能力。

我备份一下我的配置在 https://gitee.com/hiyanyx/study-transparent-proxy-v1-bash 。其实整体的难度偏大!初学者就不要看了。

异常情况1:内网主机无法访问白名单

ss-tproxy 主机上都正常,但其他主机上,黑名单正常,白名单不正常(如百度无法访问)。请将 ipts_set_snat(IPv4)、ipts_set_snat6(IPv6)设为 true。并检查 ss-tproxy 主机的 iptables 规则,有些系统会将 FORWARD 链的默认策略设为 DROP,如果有这种情况,请进行合理的调整,如果不知道怎么设置,可以参照下面的步骤,配置 pre_start 钩子函数。

代理异常时,应留意系统是否预设了某些 iptables 规则、是否与 ss-tproxy 冲突

比如,你可以通过 pre_start 钩子函数,在 start 之前,将已有的 iptables 规则清空,并将默认策略设为 ACCEPT。编辑 ss-tproxy.conf,添加如下内容(这些命令会在 ss-tproxy start 之前执行):

reset_ipt() {local table_chains=(raw 'PREROUTING OUTPUT'mangle 'PREROUTING INPUT FORWARD OUTPUT POSTROUTING'nat 'PREROUTING INPUT OUTPUT POSTROUTING'filter 'INPUT FORWARD OUTPUT')for ((i = 0; i < ${#table_chains[@]}; i += 2)); dolocal table="${table_chains[i]}"local chains="${table_chains[i + 1]}"$1 -t $table -F$1 -t $table -Xfor chain in $chains; do$1 -t $table -P $chain ACCEPTdonedone
}pre_start() {is_true "$ipv4" && reset_ipt iptablesis_true "$ipv6" && reset_ipt ip6tables
}

资源

https://gitee.com/hiyanyx/study-transparent-proxy-v1-bash

http://www.lryc.cn/news/467555.html

相关文章:

  • 报错解决:opene3d draw_geometries(): incompatible function arguments.
  • Clickhouse笔记(二) 集群搭建
  • 华为云购买弹性云服务器(教程)
  • Python异常检测- 单类支持向量机(One-Class SVM)
  • 基于SpringBoot+Vue+uniapp微信小程序的婚庆摄影小程序的详细设计和实现(源码+lw+部署文档+讲解等)
  • NGAC访问控制系列三:低代码产品NGAC运用与算法运用
  • Unity3D 面试题收录
  • Jrebel热部署不生效解决
  • 软件测试学习笔记丨Selenium键盘鼠标事件ActionChains
  • CI/CD(持续集成与持续交付)流水线
  • 分布式光伏发电有什么优劣势
  • Spring Boot框架中的IO
  • DBeaver连接Hive教程
  • Vue-Router源码实现详解
  • 程序员节日的日期是10月24日‌程序员日
  • 联邦学习中的数据异构性
  • Python小程序 - 替换文件内容
  • k8s备份恢复(velero)
  • LED户外屏:面对复杂环境的七大挑战
  • LabVIEW自动化流动返混实验系统
  • 【性能优化】安卓性能优化之CPU优化
  • springboot二手图书交易系统-计算机设计毕业源码88413
  • 解决ElasticSearch启动成功却无法在浏览器访问问题
  • 稀土有色包芯线良好的导电性
  • SIP 业务举例之 Call Forwarding Unconditional(无条件呼转)
  • 基于stm32的esp8266的WIFI控制风扇实验
  • java中的ScheduledExecutorService介绍和使用案例
  • 4天涨粉14万!这个AI小众赛道粉丝涨疯了吧?保姆级教程免费教会你!
  • RK3588 技术分享 | 在Android系统中使用NPU实现Yolov5分类检测
  • itext 转换word文档转pdf