一步实现iptebles实现服务器之间流量转发

流量走向:

客户端 --> GFW --> A服务器 --> B服务器(落地) --> YouTube --> 返回客户端

A服务器IP:2.2.2.2 端口:TCP为20001,UDP为20002
B服务器IP:6.6.6.6 端口:TCP为60001,UDP为60002

实现目的:把本机A服务器IP 2.2.2.2 上的 TCP 端口、UDP端口流量转发到B服务器IP 6.6.6.6 的 TCP 端口、UDP端口上

要实现客户端通过转发服务器 A(IP:2.2.2.2)访问落地服务器 B(IP:6.6.6.6)上的 协议1 和 协议2 服务,您需要在 A 服务器上配置 iptables 规则,将特定端口的流量转发到 B 服务器对应的端口。

步骤如下:

  1. 启用 IP 转发:在 A 服务器上,确保内核支持 IP 转发:
    echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
    sysctl -p
  2. 安装 iptables如果 A 服务器尚未安装 iptables,请执行以下命令进行安装:
    apt install iptables -y
  3. 配置 iptables 规则:在 A 服务器上,添加以下规则以转发流量:
    # 协议1 流量转发(TCP 协议)
    iptables -t nat -A PREROUTING -p tcp --dport 11364 -j DNAT --to-destination 6.6.6.6:11364
    iptables -t nat -A POSTROUTING -d 6.6.6.6 -p tcp --dport 11364 -j MASQUERADE
    # 协议2 流量转发(UDP 协议)
    iptables -t nat -A PREROUTING -p udp --dport 10326 -j DNAT --to-destination 6.6.6.6:10326
    iptables -t nat -A POSTROUTING -d 6.6.6.6 -p udp --dport 10326 -j MASQUERADE
    # 允许转发的流量通过
    iptables -A FORWARD -p tcp -d 6.6.6.6 --dport 11364 -j ACCEPT
    iptables -A FORWARD -p tcp -s 6.6.6.6 --sport 11364 -j ACCEPT
    iptables -A FORWARD -p udp -d 6.6.6.6 --dport 10326 -j ACCEPT
    iptables -A FORWARD -p udp -s 6.6.6.6 --sport 10326 -j ACCEPT


    注意:

    • PREROUTING 规则将进入 A 服务器的特定端口流量重定向到 B 服务器对应的端口。
    • POSTROUTING 规则修改数据包的源地址,使其看起来来自 A 服务器。
    • FORWARD 规则允许流量在 A 服务器上转发。
  4. 保存 iptables 规则:为了确保规则在重启后仍然生效,您可以使用 iptables-persistent 工具:
    apt install iptables-persistent -y
    iptables-save > /etc/iptables/rules.v4

    这样,规则会被保存,并在系统重启时自动加载。

  5. 客户端配置:在客户端上,配置连接到 A 服务器的相应端口:
    • 协议1:
      • 服务器地址:2.2.2.2
      • 端口:20001
      • 其他参数与原配置相同。
    • 协议22:
      • 服务器地址:2.2.2.2
      • 端口:20002
      • 其他参数与原配置相同。

通过上述配置,客户端的流量将通过 A 服务器转发到 B 服务器,实现预期的代理效果。

如删除iptables转发

列出iptables
iptables -t nat -L PREROUTING -n --line-numbers
删除对应的转发
iptables -t nat -D PREROUTING 2

方案2

可以将这些命令写入一个 .sh 脚本文件,并通过 bash 命令一键执行来设置规则。

以下是创建脚本的步骤:


1. 创建 ipzs.sh 文件

创建脚本文件并编辑:

bash
nano ipzs.sh

在文件中写入以下内容:

#!/bin/bash

# 开启 IP 转发
echo "启用 IP 转发..."
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

# VLESS 流量转发(TCP 协议)
echo "添加 VLESS TCP 转发规则..."
iptables -t nat -A PREROUTING -p tcp --dport 11364 -j DNAT --to-destination 6.6.6.6:60001
iptables -t nat -A POSTROUTING -d 6.6.6.6 -p tcp --dport 60001 -j MASQUERADE

# Hysteria2 流量转发(UDP 协议)
echo "添加 Hysteria2 UDP 转发规则..."
iptables -t nat -A PREROUTING -p udp --dport 10326 -j DNAT --to-destination 6.6.6.6:60002
iptables -t nat -A POSTROUTING -d 6.6.6.6 -p udp --dport 60002 -j MASQUERADE

# 允许转发的流量通过
echo "添加转发流量规则..."
iptables -A FORWARD -p tcp -d 6.6.6.6 --dport 60001 -j ACCEPT
iptables -A FORWARD -p tcp -s 6.6.6.6 --sport 60001 -j ACCEPT
iptables -A FORWARD -p udp -d 6.6.6.6 --dport 60002 -j ACCEPT
iptables -A FORWARD -p udp -s 6.6.6.6 --sport 60002 -j ACCEPT

# 保存规则到文件
echo "保存规则到 /etc/iptables/rules.v4..."
iptables-save > /etc/iptables/rules.v4

echo "所有规则已生效!"

2. 设置脚本权限

保存文件后,为脚本赋予可执行权限:

chmod +x forward.sh

3. 运行脚本

执行脚本以生效规则:

bash forward.sh

4. 验证规则

运行脚本后,检查规则是否生效:

iptables -t nat -L -n -v
iptables -L -n -v

说明

  • 脚本会一步完成所有规则设置,包括启用 IP 转发、设置 NAT 和转发规则、以及保存规则。
  • 规则被保存到 /etc/iptables/rules.v4,因此在系统重启后依然会生效。

完成后,只需运行一次脚本即可自动完成所有配置。🎉

1. 验证 A 服务器是否接收到流量在 A 服务器运行以下命令,确认是否有流量到达 A 的 21121 和 31122 端口:

tcpdump -i any port 21121
tcpdump -i any port 31122
  • 如果有流量到达,说明客户端到 A 的网络连接正常。
  • 如果没有流量到达,请检查客户端配置,或确认防火墙是否允许外部流量进入 A 服务器的这些端口。

2. 验证 NAT 规则是否被触发

在 A 服务器运行以下命令,检查 NAT 规则的流量统计:

iptables -t nat -L PREROUTING -n -v
iptables -t nat -L POSTROUTING -n -v

输出示例:

Chain PREROUTING (policy ACCEPT 10 packets, 800 bytes)
num  target     prot opt source               destination         
1    DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:21121 to:6.6.6.6:60001
2    DNAT       udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:31122 to:6.6.6.6:60002

Chain POSTROUTING (policy ACCEPT 10 packets, 800 bytes)
num  target     prot opt source               destination         
1    MASQUERADE tcp  --  0.0.0.0/0            6.6.6.6      tcp dpt:60001
2    MASQUERADE udp  --  0.0.0.0/0            6.6.6.6      udp dpt:60002

  • pktsbytes 增加: 表示 NAT 规则被触发,流量被正确转发。
  • 没有增加: 说明 NAT 规则未匹配到流量,可能是流量未到达 A 的端口。

3. 验证 B 服务器是否接收到流量

在 B 服务器运行以下命令,检查是否有流量到达对应端口:

tcpdump -i any port 11364
tcpdump -i any port 10326
  • 如果能捕获到流量,说明 NAT 转发已经成功。
  • 如果没有流量,请检查 A 和 B 之间的网络连通性,以及 A 的 NAT 配置。

版权声明:本文内容采用 CC BY-NC-SA 4.0 协议许可,转载请注明
文章名称:一步实现iptebles实现服务器之间流量转发
文章链接:https://www.baizi.net/chatgpt/chatgpt-share/390.html
文章链接:https://www.baizi.net/chatgpt/chatgpt-share/390.html
根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24小时内从您的设备中彻底删除下载内容,否则一切后果请您自行承担,如果您喜欢该程序,请购买注册正版以得到更好的服务。
联系方式(#替换成@):serverr#baizi.net

THE END
分享
二维码
海报
一步实现iptebles实现服务器之间流量转发
流量走向: 客户端 --> GFW --> A服务器 --> B服务器(落地) --> YouTube --> 返回客户端 A服务器IP:2.2.2.2 端口:TCP为20001,UDP为20002 ……
<<上一篇
下一篇>>