网络代理和转发工具全面技术分析

1. iptables

底层技术

  • 工作层级: Linux内核netfilter框架
  • 处理方式: 数据包在内核态直接处理,零拷贝
  • 实现机制: 基于规则链和表的包过滤系统
  • 数据流: 网卡 → 内核netfilter钩子 → 直接修改包头 → 转发

性能指标

  • 延迟: ~0.05ms
  • 吞吐: 接近线速(40Gbps+)
  • CPU占用: 极低
  • 内存占用: 几乎无额外开销

优劣势

优势: 最高性能,零额外延迟,硬件加速支持 ❌ 劣势: 只支持L3/L4转发,无协议转换,配置复杂


2. brook

底层技术

  • 实现语言: Go语言
  • 网络模型: goroutine per connection
  • 加密: 自定义AES-256-CFB + 混淆
  • 架构: C/S架构,支持多种代理模式

性能指标

  • 延迟: ~0.3-0.8ms
  • 吞吐: ~2-6 Gbps
  • CPU占用: 中等
  • 内存占用: ~20-100MB

优劣势

优势: 开发维护简单,跨平台,内置加密混淆 ❌ 劣势: GC延迟抖动,协议相对单一,性能中等


3. caddy

底层技术

  • 实现语言: Go语言
  • 定位: Web服务器 + 反向代理
  • 特色: 自动HTTPS,插件化架构
  • HTTP版本: 原生支持HTTP/1.1、HTTP/2、HTTP/3

性能指标

  • 延迟: ~0.5-2ms (HTTP处理开销)
  • 吞吐: ~1-4 Gbps
  • CPU占用: 中高(HTTP解析开销)
  • 内存占用: ~50-200MB

优劣势

优势: 自动TLS证书,配置简单,Web功能强大 ❌ 劣势: 主要面向HTTP,非HTTP代理功能有限


4. ehco

底层技术

  • 实现语言: Go语言
  • 专门用途: 网络中继和流量转发
  • 特色: 支持WebSocket隧道,多种传输层
  • 架构: 轻量级转发器

性能指标

  • 延迟: ~0.2-0.6ms
  • 吞吐: ~3-8 Gbps
  • CPU占用: 低
  • 内存占用: ~10-50MB

优劣势

优势: 轻量级,专注转发,支持WebSocket隧道 ❌ 劣势: 功能相对简单,生态不如主流工具


5. gost

底层技术

  • 实现语言: Go语言
  • 架构: 链式代理架构,多级转发
  • 协议支持: HTTP/SOCKS/SS/V2Ray/Trojan等全协议
  • 特色: 插件系统,配置文件支持

性能指标

  • 延迟: ~0.5-1.2ms
  • 吞吐: ~1-5 Gbps
  • CPU占用: 中高
  • 内存占用: ~30-150MB

优劣势

优势: 协议最全,链式转发,功能丰富,配置灵活 ❌ 劣势: 性能中等,资源占用较高,复杂性高


6. socat

底层技术

  • 实现语言: C语言
  • 架构: 单进程,epoll多路复用
  • 定位: 通用数据中继工具
  • 特色: 支持各种socket类型和协议

性能指标

  • 延迟: ~0.1-0.3ms
  • 吞吐: ~3-8 Gbps
  • CPU占用: 低
  • 内存占用: ~5-20MB

优劣势

优势: 轻量稳定,资源占用低,协议支持丰富 ❌ 劣势: 单线程瓶颈,功能相对基础,无高级代理功能


7. realm

底层技术

  • 实现语言: Rust
  • 异步框架: tokio异步运行时
  • 内存管理: 零成本抽象,编译时内存安全
  • 网络库: 高性能异步网络栈

性能指标

  • 延迟: ~0.2-0.5ms
  • 吞吐: ~8-15 Gbps
  • CPU占用: 低
  • 内存占用: ~10-50MB

优劣势

优势: 高性能,内存安全,资源占用低 ❌ 劣势: 功能简单,生态较新,开发难度高


8. v2ray

底层技术

  • 实现语言: Go语言
  • 架构: 模块化设计,路由分流
  • 协议: VMess/VLESS/Shadowsocks等
  • 特色: 强大的路由和分流功能

性能指标

  • 延迟: ~0.8-2ms
  • 吞吐: ~1-4 Gbps
  • CPU占用: 中高(加密和路由开销)
  • 内存占用: ~50-200MB

优劣势

优势: 功能强大,路由灵活,协议先进,抗封锁能力强 ❌ 劣势: 配置复杂,性能开销大,学习成本高


9. iperf3

底层技术

  • 实现语言: C语言
  • 用途: 网络性能测试工具
  • 测试模式: TCP/UDP带宽测试
  • 架构: 客户端-服务器模式

性能指标

  • 延迟: 测试工具,不适用
  • 吞吐: 能测试到线速
  • 作用: 网络性能基准测试

优劣势

优势: 标准测试工具,结果准确,功能专业 ❌ 劣势: 仅用于测试,非生产转发工具


10. haproxy

底层技术

  • 实现语言: C语言
  • 架构: 事件驱动,单进程多线程
  • 定位: 专业负载均衡器
  • 特色: 高级负载均衡算法,健康检查

性能指标

  • 延迟: ~0.1-0.5ms
  • 吞吐: ~10-40 Gbps
  • CPU占用: 低-中
  • 内存占用: ~20-100MB

优劣势

优势: 专业LB功能,性能极高,稳定性好,企业级 ❌ 劣势: 主要面向HTTP/TCP LB,代理功能有限


11. wstunnel

底层技术

  • 实现语言: Rust
  • 特色: WebSocket隧道专用工具
  • 用途: 通过WebSocket传输TCP/UDP流量
  • 场景: 穿越防火墙和代理

性能指标

  • 延迟: ~0.5-1.5ms (WebSocket开销)
  • 吞吐: ~2-6 Gbps
  • CPU占用: 中(WebSocket编解码)
  • 内存占用: ~15-60MB

优劣势

优势: WebSocket伪装好,穿透能力强 ❌ 劣势: WebSocket开销,功能单一


12. shadowsocks

底层技术

  • 实现语言: 多种(Python/C/Go/Rust)
  • 加密: 多种对称加密算法
  • 协议: SOCKS5代理 + 加密传输
  • 特色: 简单高效的加密代理

性能指标(以ss-rust为例)

  • 延迟: ~0.3-0.8ms
  • 吞吐: ~3-10 Gbps
  • CPU占用: 低-中
  • 内存占用: ~10-50MB

优劣势

优势: 简单高效,加密强度好,多语言实现 ❌ 劣势: 功能单一,易被检测,协议相对简单


13. tinyPortMapper

底层技术

  • 实现: 轻量级端口映射工具
  • 用途: 简单的端口转发和映射
  • 特色: 极简设计,资源占用最小

性能指标

  • 延迟: ~0.1-0.4ms
  • 吞吐: ~5-12 Gbps
  • CPU占用: 极低
  • 内存占用: ~2-10MB

优劣势

优势: 极简轻量,性能好,资源占用最小 ❌ 劣势: 功能极其有限,无高级特性


14. prometheus node exporter

底层技术

  • 实现语言: Go语言
  • 用途: 系统监控指标收集
  • 架构: HTTP服务器,暴露metrics接口
  • 作用: 监控系统性能指标

性能指标

  • 延迟: 监控工具,不适用
  • 资源占用: ~10-30MB
  • 作用: 配合Prometheus做监控

优劣势

优势: 标准监控工具,指标全面 ❌ 劣势: 仅用于监控,非转发工具


综合性能排序

纯转发性能 (高到低)

  1. iptables: 接近线速
  2. haproxy: 10-40 Gbps
  3. realm: 8-15 Gbps
  4. tinyPortMapper: 5-12 Gbps
  5. socat: 3-8 Gbps
  6. ehco: 3-8 Gbps
  7. shadowsocks: 3-10 Gbps
  8. brook: 2-6 Gbps
  9. wstunnel: 2-6 Gbps
  10. gost: 1-5 Gbps
  11. v2ray: 1-4 Gbps
  12. caddy: 1-4 Gbps

功能丰富度 (高到低)

  1. gost: 全协议支持,链式转发,配置最灵活
  2. v2ray: 路由分流,多协议,功能强大
  3. caddy: Web服务器功能,自动HTTPS
  4. haproxy: 专业负载均衡,健康检查
  5. brook: 基础代理功能,简单易用
  6. shadowsocks: 加密代理,简单高效
  7. ehco: 转发专用,WebSocket支持
  8. wstunnel: WebSocket隧道专用
  9. socat: 通用数据中继
  10. realm: 基础转发
  11. tinyPortMapper: 极简端口映射
  12. iptables: 基础包转发

资源占用 (低到高)

  1. iptables: 几乎无开销
  2. tinyPortMapper: 2-10MB
  3. socat: 5-20MB
  4. realm: 10-50MB
  5. shadowsocks: 10-50MB
  6. ehco: 10-50MB
  7. wstunnel: 15-60MB
  8. brook: 20-100MB
  9. haproxy: 20-100MB
  10. gost: 30-150MB
  11. caddy: 50-200MB
  12. v2ray: 50-200MB

VPN业务选型建议

高性能场景

推荐组合: iptables + realm + 监控

  • iptables做纯转发
  • realm处理需要代理的流量
  • prometheus监控性能

复杂代理场景

推荐: gost (继续使用)

  • 协议支持最全面
  • 链式转发无可替代
  • 配置灵活,功能丰富

特定场景优化

  • WebSocket隧道: wstunnel
  • 负载均衡: haproxy
  • Web代理: caddy
  • 简单转发: socat/realm
  • 监控: prometheus + node_exporter

不建议用于生产

  • iperf3: 仅测试工具
  • tinyPortMapper: 功能过于简单
  • prometheus node exporter: 仅监控工具

WordPress使用nginx反向代理并且开启SSL,导致前台样式丢失,后台无法登录的解决办法

如题,使用nginx对WordPress进行反向代理,最终出现了两个情况。

网站首页能正常访问,但是样式丢失,浏览器查看网络情况,发现样式请求的依然是http资源。
管理后台无法访问,提示重定向次数太多。
解决方法如下
一、强制开启SSL
找到WordPress所在目录,如【/www/wwwroot/192.168.1.135】,修改wp-config.php,加入如下代码,注意填写自己的域名。

$_SERVER[‘HTTPS’] = ‘on’;
define(‘FORCE_SSL_ADMIN’, true);
define(‘FORCE_SSL_LOGIN’, true);
define(‘WP_HOME’, ‘https://xxxxx.com’);
define(‘WP_SITEURL’, ‘https://xxxxx.com’);
此时网站前台能正常访问,样式正常。管理后台能访问,但是丢失样式。

接着进行第二部操作。

二、强制跳转https
找到WordPress所在目录,修改wp-includes目录下的functions.php文件。
找到以下代码(大概在第8行)

require( ABSPATH . WPINC . ‘/option.php’ );
在下方添加以下代码:

add_filter(‘script_loader_src’, ‘agnostic_script_loader_src’, 20,2); function agnostic_script_loader_src($src, $handle) { return preg_replace(‘/^(http|https):/’, ”, $src); }
add_filter(‘style_loader_src’, ‘agnostic_style_loader_src’, 20,2); function agnostic_style_loader_src($src, $handle) { return preg_replace(‘/^(http|https):/’, ”, $src); }
修改后重启WordPress,一切正常。

How to test network throughput using iperf3 tool

iperf  is a free and open source cross-platform command-line tool used for checking network performance in terms of bandwidth and speed. It is a highly reliable tool in comparison to the many network bandwidth and speed testing tools. In addition, it is a highly effective tool when testing for network performance between 2 servers spread across different geographical regions.  In this tutorial, we’ll take you through how you can test network throughput using iperf3 tool.

Requirements

Two networked Linux systems with iperf3 installed

Installation of iperf3

installation of iperf3 on Linux is a pretty easy task since it exists in official software repositories of most Linux distributions.

Install iperf3 on Debian/Ubuntu

# sudo apt-get install iperf3

Install iperf3 on RHEL/CentOS

# yum install epel-release

# yum install iperf3

Install iperf3 on Fedora 22 and later

# dnf install iperf3

Install iperf3 from source

You can also choose to install iperf3 from source by running the commands below.  To download the source package run

# wget https://sourceforge.net/projects/iperf/files/latest/download

Once downloaded, extract the package

# tar -xvf iperf-2.0.5.tar.gz

Next, navigate into the extracted folder

# cd iperf-2.0.5

Run the command to configure

# ./configure

Compile it using the make command

# make

Finally, install using  make install

# make install

Testing network throughput between 2 Linux servers

So now that we have iperf3 installed, it’s now time to check the bandwidth between two systems. For that to happen, one system needs to be set as the client and the other one as the server. In this illustration, I have 2 servers:

  1. RedHat (iperf3 server) –  IP  172.31.16.67
  2. Ubuntu (iperf3 client)  –  IP  172.31.21.90

To set an iperf3 server

To set the RedHat system as the iperf3 server, Open the  terminal and run

# iperf3 -s

Output

test network throughput using iperf3

Connecting Client to server

Now we are going to connect our Ubuntu client to the RedHat server system. To achieve this run

iperf3 -c 172.31.16.67

You will start getting the following statistics as shown below, both on the client and server

iperf3 client (Ubuntu) Output

test network throughput using iperf3

iperf3 server (RedHat) Output

To reverse the direction of packets

iperf3 -c 172.31.16.67 -R

To print the output in JSON format

iperf3 -c 172.31.16.67 -J

 

To get help with commands run

iperf3 --help

To define interval times append the -i flag

iperf3 -c 172.31.16.67 -i 3

For more usage on iperf3 commands , visit mankier

Cloudflare搭建DDNS(脚本版)

自建DDNS解决动态IP服务器访问问题
  • 把域名接入cloudflare

  • 获取Global API Key

  • 设置用于 DDNS 解析的二级域名,流量不经过CDN(云朵变灰)

  • 下载 DDNS 脚本

  • 修改 DDNS 脚本并补充相关信息

  • 设置定时任务

把域名接入cloudflare

打开cloudflare,登陆账号添加网站按照提示操作

获取Global API Key

访问 https://dash.cloudflare.com/profile在页面下方找到 Global API Key,点击右侧的 View 查看 Key,并保存下来 ,在页面下方找到 Global API Key,点击右侧的 View 查看 Key,并保存下来

1
设置用于 DDNS 解析的二级域名,流量不经过CDN(云朵变灰)

添加一条A记录,例如:hkt.test.com,Proxy status设置成DNS only

2
下载 DNNS 脚本
curl https://raw.githubusercontent.com/aipeach/cloudflare-api-v4-ddns/master/cf-v4-ddns.sh > /root/cf-v4-ddns.sh && chmod +x /root/cf-v4-ddns.sh
修改 DDNS 脚本并补充相关信息
vim cf-v4-ddns.sh
# incorrect api-key results in E_UNAUTH error
# 填写 Global API Key
CFKEY=

# Username, eg: user@example.com
# 填写 CloudFlare 登陆邮箱
CFUSER=

# Zone name, eg: example.com
# 填写需要用来 DDNS 的一级域名
CFZONE_NAME=

# Hostname to update, eg: homeserver.example.com
# 填写 DDNS 的二级域名(只需填写前缀)
CFRECORD_NAME=
设置定时任务

首次运行脚本,输出内容会显示当前IP,进入cloudflare查看 确保IP已变更为当前IP

./cf-v4-ddns.sh

定时任务

crontab -e
*/2 * * * * /root/cf-v4-ddns.sh >/dev/null 2>&1

# 如果需要日志,替换上一行代码
*/2 * * * * /root/cf-v4-ddns.sh >> /var/log/cf-ddns.log 2>&1

Amazon Route 53如何实现自动故障转移和恢复

Amazon Route 53 中,你可以使用 健康检查(Health Checks)+ 失效转移(Failover Routing) 方式来实现自动故障转移和恢复。以下是详细步骤:


📌 1. 创建健康检查

步骤

  1. 登录 AWS 控制台,进入 Route 53 控制面板。
  2. 在左侧导航栏,选择 Health Checks(健康检查)
  3. 点击 Create health check(创建健康检查)
  4. 填写健康检查信息:
    • 名称:填写一个唯一的名称,例如 MyServerHealthCheck
    • Monitor Endpoint(监测端点)
      • 选择 IP 地址,输入要监测的服务器 IP
      • 端口号(例如 80443
      • 选择健康检查类型
        • HTTP / HTTPS(建议选择 HTTPS 以提高安全性)
    • Failure Threshold(失败阈值):设置触发故障的次数(默认 3 次)。
    • Request Interval(请求间隔):建议 30s(默认)。
    • Invert Health Check Status(反转健康检查状态)(可选):如果希望状态反向,可以选中。
  5. 配置 SNS 通知(可选):
    • 你可以启用 SNS 以在服务器宕机或恢复时收到通知。
  6. 点击 Create(创建)

🔹 ✅ 这样,Route 53 会定期检查服务器 IP 是否正常工作。如果该 IP 宕机,健康检查会标记为 unhealthy(不健康)。


📌 2. 配置 DNS 记录进行自动故障转移

  1. Route 53 控制台,进入 你的域名
  2. 选择 Record Sets(记录集),点击 Create Record Set(创建记录集)
  3. 配置 A 记录(IPv4)或 AAAA 记录(IPv6),针对每个 IP 设置如下:
    • Name(名称):留空或填写子域名(如 www)。
    • Type(类型):A(IPv4)或 AAAA(IPv6)。
    • Alias(别名):No。
    • TTL(缓存时间):建议 60 秒(短 TTL 可加快故障切换)。
    • Routing Policy(路由策略)
      • 选择 Failover(故障转移)。
    • Failover Record Type(故障转移记录类型)
      • 对于 主 IP(例如 192.168.1.1),选择 Primary(主)。
      • 对于 备用 IP(例如 192.168.1.2),选择 Secondary(备用)。
    • Associate with Health Check(关联健康检查)
      • 选中 Yes,并选择 之前创建的健康检查
  4. 重复上述步骤,为所有服务器 IP 添加健康检查和故障转移设置。

📌 3. 故障转移逻辑

  • 正常情况:Route 53 会解析所有 健康(healthy) 状态的 IP。
  • 某个 IP 宕机:Route 53 自动从解析列表中移除该 IP,并将流量转移到其他健康 IP。
  • IP 恢复:Route 53 自动重新解析该 IP,让它恢复上线。

📌 4. 其他优化(可选)

使用 Weighted Routing(加权路由)

如果你想让流量分配到多个 IP,但仍然具有故障转移功能,可以使用 加权路由(Weighted Routing)+ 健康检查

  • 配置 每个 IP 的权重,如 30%、30%、40%
  • 仍然关联 健康检查,宕机时 Route 53 自动调整流量分配

✅ 总结

  1. 创建 Route 53 健康检查,监控服务器 IP 是否存活。
  2. 在 DNS 解析中设置故障转移(Failover Routing),主服务器宕机时自动切换到备用 IP。
  3. 当 IP 恢复后,Route 53 会自动重新解析,让其恢复上线。

这样,你就可以实现 自动下线宕机 IP,并在服务器恢复后 自动上线。🚀

rockylinux8 批量替换文件夹下面所有html的文件的指定网址

Rocky Linux 8 上,可以使用 sed 命令批量替换指定网址,并配合 find 命令处理所有 HTML 文件。

示例命令:

find /path/to/directory -type f -name "*.html" -exec sed -i 's|旧网址|新网址|g' {} +

命令解析:

  • find /path/to/directory -type f -name "*.html"
    • 查找 /path/to/directory 目录下所有 .html 文件。
  • -exec sed -i 's|旧网址|新网址|g' {} +
    • 使用 sed 进行 就地修改(-i),将 旧网址 替换为 新网址
    • s|旧网址|新网址|g:替换所有匹配的内容。
    • {} 代表 find 结果的文件名,+ 使 find 传递多个文件,提高效率。

示例

假设你要替换 /var/www/html 目录下所有 HTML 文件里的 http://old.example.comhttps://new.example.com,命令如下:

find /var/www/html -type f -name "*.html" -exec sed -i 's|http://old.example.com|https://new.example.com|g' {} +

如果你需要更强大的替换功能,可以用 perl

find /var/www/html -type f -name "*.html" -exec perl -pi -e 's|http://old.example.com|https://new.example.com|g' {} +

注意:

  • 建议先备份文件,以防替换出错:
    cp -r /var/www/html /var/www/html_backup
    
  • sed 可能对一些特殊字符(如 /&)敏感,可以用 | 代替 / 作为分隔符,避免转义符 \

如果有更复杂的需求,可以告诉我具体情况,我帮你优化命令。 😊

Linux 查看网卡实时网速以及 nload 命令详解

1.使用 nload 工具查看

复制代码
安装工具

yum install -y epel-release #先安装epel软件库
yum install -y nload #再安装nload

# 查看所有网卡实时网速
sudo nload -m

# 查看指定网卡实时网速
sudo nload eth0 -m
复制代码

 

nload 默认分为上下两块:
上半部分:Incoming也就是进入网卡的流量
下半部分:Outgoing,也就是从这块网卡出去的流量

参数详情表

参数 描述
Curr 当前流量
Avg 平均流量
Min 最小流量
Max 最大流量
Ttl 总和流量

 

 

注:小写代表bit,大写代表byte

Bit(比特)是存储单元;Byte(字节)是计量单位,查看网络时常用Byte

1Byte=8Bit
比如:网速计算
我们常说的家庭网速为10M,100M,其值为带宽,转换为Byte为
下载速度从理论上来说,应该是带宽的八分之一
10M=1280kb/s 100M=12800kb/s=12.5Mb/s

 

参考地址:https://blog.csdn.net/m0_58292366/article/details/125145915

 

 

2.通过 ifconfig 实时查看

watch -n 1 ifconfig

 

3.通过脚本查看

复制代码
#!/bin/bash

awk 'BEGIN{
OFMT="%.3f";
devf="/proc/net/dev";
while(("cat "devf) | getline)
{
    if($0 ~ /:/ && ($10+0) > 0)
    {
        split($1,tarr,":");
        net[tarr[1]]=$10+tarr[2];
        print tarr[1],$10+tarr[2];
    }
}
close(devf);

icount=0
while((system("sleep 1")) >=0)
{
   icount +=1
    system("clear");
    while( getline < devf )
    {
        if($0 ~ /:/ && ($10+0) > 0)
            {
                split($1,tarr,":");
                if(tarr[1] in net)
                {
                    print tarr[1],":",($10+tarr[2]-net[tarr[1]])*8/1024,"kb/s";
                    net[tarr[1]]=$10+tarr[2];
                }      
            }   
    }
    close(devf);
   if (icount>100)
    {break;}
}
}'
复制代码
icount=计数100次之后自动退出。

 

4.通过下载源文件,本地编译安装 nload

复制代码
yum install wget  #安装wget下载工具
wget http://www.roland-riegel.de/nload/nload-0.7.4.tar.gz  #下载 nload-0.7.4.tar.gz
tar zxvf nload-0.7.4.tar.gz  #解压这个压缩包
cd nload-0.7.4  #进入解压后的文件目录
yum install gcc gcc-c++ ncurses-devel  #安装依赖库
./configure #检测你的安装平台的目标特征的
make  #编译
make install  #安装
复制代码

 

5.scp 命令测试

A 机器请求 B 机器的数据,经常遇到超时。A机器带宽可能有限制,排查带宽的时候,又不能安装程序。这时候可以考虑 scp 命令。

通过 在 A 机器上 从B 机器上拉去文件,观察是否能正常拉取,以及拉取完成 的耗时,平均网速,来知晓机器带宽情况。

 

scp upchina@172.16.9.227:/usr/local/app/taf/app_log/algo/FactorTsbReadServer/2530318728.log  abc.log

 

scp命令解释。

scp 将   B机器文件,拷贝到  本机

scp    用户名@机器地址+目标文件地址+文件名    本机目录+本机文件名

scp username@remote:/path/to/remote/file /path/to/local/directory

 

 

scp 命令可以参考:https://www.cnblogs.com/abel-he/p/16502825.html