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

133 天前
 vasaeru
本教程适用于 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
2071 次点击
所在节点    宽带症候群
16 条回复
selca
133 天前
这不是官方文档吗?
povsister
133 天前
这不是端口转发配置吗,没看出和 xray 有啥关系
b1u2g3
133 天前
学艺不精,估计没看过文档
herozzm
133 天前
参看官方文档:透明代理
Altairvelvet
133 天前
你都用 iptables 转发了,配置个 CSF 不是更方便?
Redhut
133 天前
xray 任意门不是挺好用的嘛
beddo
133 天前
楼主方便留个联系方式吗?有问题探讨哈。
vasaeru
133 天前
就是一个单纯 nat 中转的教程 因为搜半天没有详细的教程就发出来了 至于官方文档我确实没有看过
vasaeru
133 天前
@selca 和官方文档不一样吧,官方文档里还需要中转服务器安装 xray ,单纯使用 iptables 三分钟就配置好了也不需要安装额外的东西
peasant
133 天前
@vasaeru #9 很明显你看的和 4 楼说的不是同一个东西
1423
133 天前
人还是比 AI 强
试了几个 AI, 要么忘记 iptables-save, 要么多余地用 systemd 自己实现 iptables restore, 要么开机自动编辑 sysctl.conf 加入转发, 而且普遍不知道用 PREROUTING+POSTROUTING
但是 AI 排版普遍比 op 要强, 楼主没有使用 markdown
vasaeru
133 天前
@peasant 他说的是哪个
xqzr
133 天前
有 SNAT 不需要 MASQUERADE 了吧
Ipsum
133 天前
这不是基操???
sadan9
130 天前
iptables-save 不是只导出规则么?至少应该覆盖默认规则配置文件吧。还是我记错了。
vasaeru
130 天前
@sadan9 iptables-save 是让系统重启以后读取保存的规则

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1064217

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX