V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
vasaeru
V2EX  ›  宽带症候群

分享一个使用 iptables 中转 Xray 的教程方法

  •  
  •   vasaeru · 140 天前 · 2094 次点击
    这是一个创建于 140 天前的主题,其中的信息可能已经有所发展或是发生改变。
    本教程适用于 Ubuntu20 系统,其他系统也可以尝试。

    因为 Xray 只使用 TCP 进行代理(虽然它支持 fullcone 的 UPD ),所以我们只需要转发 TCP 流量即可。
    代理服务器记得打开所有 TCP 端口,否则 UDP 可能会失效。

    1.开启转发功能
    echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
    sysctl -p

    2.打开 iptables NAT
    /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

    3.开放指定端口
    iptables -A INPUT -p tcp --dport 中转服务器端口 -j ACCEPT
    iptables -A OUTPUT -p tcp --sport 中转服务器端口 -j ACCEPT

    iptables -A FORWARD -o eth0 -d 目标服务器 IP -p tcp --dport 目标服务器端口 -j ACCEPT
    iptables -A FORWARD -i eth0 -s 目标服务器 IP -p tcp --sport 目标服务器端口 -j ACCEPT

    4.获取中转服务器本地 IP (中转服务器 eth0 的局域网 IP ,不是公网 IP )
    ifconfig

    5.转发到指定服务器
    iptables -t nat -A PREROUTING -d 中转服务器本地 IP -p tcp --dport 中转服务器端口 -j DNAT --to-destination 目标服务器 IP:目标服务器端口
    iptables -t nat -A POSTROUTING -s 目标服务器 IP -p tcp --dport 目标服务器端口 -j SNAT --to-source 中转服务器本地 IP:中转服务器端口

    举个例子
    我想通过端口号 10000 中转服务器 IP 为 113.108.81.189 ,端口号为 443 (通常默认)的代理服务器
    通过 ifconfig 查询到 eth0 本地 IP 为 172.13.0.26
    iptables -A INPUT -p tcp --dport 10000 -j ACCEPT
    iptables -A OUTPUT -p tcp --sport 10000 -j ACCEPT
    iptables -A FORWARD -o eth0 -d 113.108.81.189 -p tcp --dport 443 -j ACCEPT
    iptables -A FORWARD -i eth0 -s 113.108.81.189 -p tcp --sport 443 -j ACCEPT
    iptables -t nat -A PREROUTING -d 172.13.0.26 -p tcp --dport 10000 -j DNAT --to-destination 113.108.81.189:443
    iptables -t nat -A POSTROUTING -s 113.108.81.189 -p tcp --dport 443 -j SNAT --to-source 172.13.0.26:10000

    保存下 iptables 的规则
    iptables-save

    可以通过以下代码查看规则是否添加成功
    iptables -L -n --line-number

    最后的最后:记得在安全组打开需要的端口,如果需要开启 fullcone 转发可以参考这篇教程: https://www.186086.xyz/Linux/Ubuntu%2020%20%E5%90%AF%E7%94%A8%20iptables%20fullconenat
    第 1 条附言  ·  140 天前
    补充下使用方法,把 xray 节点中最上面的地址和端口,改为中转服务器的公网 ip 和刚刚配置的端口就可以了,其他不用改变
    16 条回复    2024-08-15 22:00:46 +08:00
    selca
        1
    selca  
       140 天前
    这不是官方文档吗?
    povsister
        2
    povsister  
       140 天前 via iPhone
    这不是端口转发配置吗,没看出和 xray 有啥关系
    b1u2g3
        3
    b1u2g3  
       140 天前
    学艺不精,估计没看过文档
    herozzm
        4
    herozzm  
       140 天前
    参看官方文档:透明代理
    Altairvelvet
        5
    Altairvelvet  
       140 天前
    你都用 iptables 转发了,配置个 CSF 不是更方便?
    Redhut
        6
    Redhut  
       140 天前
    xray 任意门不是挺好用的嘛
    beddo
        7
    beddo  
       140 天前
    楼主方便留个联系方式吗?有问题探讨哈。
    vasaeru
        8
    vasaeru  
    OP
       140 天前 via Android
    就是一个单纯 nat 中转的教程 因为搜半天没有详细的教程就发出来了 至于官方文档我确实没有看过
    vasaeru
        9
    vasaeru  
    OP
       140 天前 via Android
    @selca 和官方文档不一样吧,官方文档里还需要中转服务器安装 xray ,单纯使用 iptables 三分钟就配置好了也不需要安装额外的东西
    peasant
        10
    peasant  
       140 天前
    @vasaeru #9 很明显你看的和 4 楼说的不是同一个东西
    1423
        11
    1423  
       140 天前
    人还是比 AI 强
    试了几个 AI, 要么忘记 iptables-save, 要么多余地用 systemd 自己实现 iptables restore, 要么开机自动编辑 sysctl.conf 加入转发, 而且普遍不知道用 PREROUTING+POSTROUTING
    但是 AI 排版普遍比 op 要强, 楼主没有使用 markdown
    vasaeru
        12
    vasaeru  
    OP
       140 天前 via Android
    @peasant 他说的是哪个
    xqzr
        13
    xqzr  
       140 天前
    有 SNAT 不需要 MASQUERADE 了吧
    Ipsum
        14
    Ipsum  
       140 天前 via Android
    这不是基操???
    sadan9
        15
    sadan9  
       137 天前
    iptables-save 不是只导出规则么?至少应该覆盖默认规则配置文件吧。还是我记错了。
    vasaeru
        16
    vasaeru  
    OP
       137 天前
    @sadan9 iptables-save 是让系统重启以后读取保存的规则
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1225 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 18ms · UTC 17:50 · PVG 01:50 · LAX 09:50 · JFK 12:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.