当前位置: 首页 > 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

相关文章:

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

TPROXY 是一个 Linux 内核模块&#xff0c;在 Linux 2.6.28 后进入官方内核。 1 安装 tproxy 相关依赖 参考ss-tproxy 的安装依赖。 bash ss-tproxy 使用了 bash 的一些语法特性&#xff0c;比如 shell 数组&#xff0c;因此必须用 bash 解释器执行。大多数发行版已经自带了…...

报错解决:opene3d draw_geometries(): incompatible function arguments.

1. 报错信息 o3d.visualization.draw_geometries(target_pcd) TypeError: draw_geometries(): incompatible function arguments. The following argument types are supported:1. (geometry_list: List[open3d.cpu.pybind.geometry.Geometry], window_name: str Open3D, wid…...

Clickhouse笔记(二) 集群搭建

0.集群规划 操作系统使用ubuntu2204server&#xff0c;8C8G100G。 节点分片部署192.168.50.5分片1副本1clickhouse-server/clickhouse-client/keeper192.168.50.6分片1副本2clickhouse-server/clickhouse-client/keeper192.168.60.7分片2副本1clickhouse-server/clickhouse-c…...

华为云购买弹性云服务器(教程)

配置弹性云服务器 基础配置 实例 操作系统...

Python异常检测- 单类支持向量机(One-Class SVM)

系列文章目录 Python异常检测- Isolation Forest&#xff08;孤立森林&#xff09; python异常检测 - 随机离群选择Stochastic Outlier Selection (SOS) python异常检测-局部异常因子&#xff08;LOF&#xff09;算法 Python异常检测- DBSCAN 文章目录 系列文章目录前言一、On…...

基于SpringBoot+Vue+uniapp微信小程序的婚庆摄影小程序的详细设计和实现(源码+lw+部署文档+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…...

NGAC访问控制系列三:低代码产品NGAC运用与算法运用

目录 一、基于NGAC的低代码模型权限管理方案 二、多策略访问控制系统限制内部访问的线性时间算法 1、概述 2、权限控制图遍历算法 一、基于NGAC的低代码模型权限管理方案 NGAC在低代码平台的权限决策模型&#xff1a;功能权限数据权限 案例&#xff1a;对于七巧低代码开发平台&…...

Unity3D 面试题收录

Unity3D 客户端面试题收录&#xff08;持续更新~&#xff09; 面试题收录 本文收录一些对于 Unity3D 客户端可能遇到的面试题&#xff08;持续更新~&#xff09;&#xff0c;答案仅出于个人理解&#xff0c;如有偏差&#xff0c;希望指正。 Unity3D MonoBehaviour 生命周期…...

Jrebel热部署不生效解决

打开setting找到build底下的complier勾选 build project automatically 设置自动构建项目 打开setting找到Advanced Setting勾选Complier中的第一项 Jrebel panel中勾选需要热部署的项目模块 项目配置信息&#xff1a;Edit Configuration中进行编辑&#xff0c;配置如下图…...

软件测试学习笔记丨Selenium键盘鼠标事件ActionChains

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/22515 本文为霍格沃兹测试开发学社的学习经历分享&#xff0c;写出来分享给大家&#xff0c;希望有志同道合的小伙伴可以一起交流技术&#xff0c;一起进步~ 说明&#xff1a;本篇博客基于sel…...

CI/CD(持续集成与持续交付)流水线

集成 Jenkins、GitLab Webhook、Nexus 和 RabbitMQ 可以形成一个全面的 CI/CD&#xff08;持续集成与持续交付&#xff09;流水线&#xff0c;结合消息队列可以创建事件驱动的工作流。以下是配置这四个工具以实现一个基本的 CI/CD 流程的详细步骤。 前置条件 Jenkins、GitLab、…...

分布式光伏发电有什么优劣势

分布式光伏发电是指在离电力消费地点较近的地方&#xff0c;通过安装光伏发电系统来发电。这种系统通常用于屋顶、地面或其他建筑物上&#xff0c;相比于集中式光伏发电系统&#xff0c;它有一些独特的优势和劣势&#xff1a; 优势&#xff1a; 地理适应性&#xff1a; 分布式…...

Spring Boot框架中的IO

1. 文件资源的访问与管理 在 Spring Boot 中&#xff0c;资源文件的访问与管理是常见的操作需求&#xff0c;比如加载配置文件、读取静态文件或从外部文件系统读取文件。Spring 提供了多种方式来处理资源文件访问&#xff0c;包括通过 ResourceLoader、Value 注解以及 Applica…...

DBeaver连接Hive教程

hive shell&#xff1a;通过hive shell来操作hive&#xff0c;但是至多只能存在一个hive shell&#xff0c;启动第二个会被阻塞&#xff0c;也就是说hive shell不支持并发操作。 基于JDBC等协议&#xff1a;启动hiveserver2&#xff0c;通过jdbc协议可以访问hive&#xff0c;hi…...

Vue-Router源码实现详解

1.Hash模式 hash就是url中#后面的部分hash改变时&#xff0c;页面不会从新加载&#xff0c;会触发hashchange事件&#xff0c;去监听hash改变&#xff0c;而且也会被记录到浏览器历史记录中vue-router的hash模式&#xff0c;主要是通过hashchange事件&#xff0c;根据hash值找…...

程序员节日的日期是10月24日‌程序员日

‌程序员节日的日期是10月24日。‌ 这一天被称为‌中国程序员日或‌1024程序员节&#xff0c;由‌博客园、‌CSDN等自发组织设立&#xff0c;旨在纪念程序员对科技世界的贡献。 程序员节日的由来和意义 1024程序员节的由来可以追溯到2010年&#xff0c;最初由网友提出设立一个…...

联邦学习中的数据异构性

在联邦学习&#xff08;Federated Learning, FL&#xff09;领域中&#xff0c; 异构数据&#xff08;Heterogeneous Data&#xff09; 是指不同客户端所持有的本地数据在特征分布、类别分布、数量等方面存在差异的数据。这种数据的异质性是联邦学习面临的一大挑战&#xff0c;…...

Python小程序 - 替换文件内容

1. 写入文件c:\a.txt 1&#xff09;共写入10行 2&#xff09;每行内容 0123456789 # 1 ls 0123456789 ln 10 with open("c:/a.txt", w,encodingUTF-8) as f:for i in range(ln):f.write(ls\n)######################################### 2 ln 10…...

k8s备份恢复(velero)

velero简介 velero官网&#xff1a; https://velero.io/ velero-github&#xff1a; https://github.com/vmware-tanzu/velero velero的特性 备份可以按集群资源的子集&#xff0c;按命名空间、资源类型标签选择器进行过滤&#xff0c;从而为备份和恢复的内容提供高度的灵活…...

LED户外屏:面对复杂环境的七大挑战

户外LED显示屏作为现代城市广告和信息传播的重要媒介&#xff0c;其应用范围越来越广泛。然而&#xff0c;与室内环境相比&#xff0c;户外环境的复杂多变对LED显示屏提出了更高的要求。本文将探讨户外LED显示屏在设计和应用过程中必须考虑的七个关键问题。 1. 高分辨率 户外LE…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...