在教程之后,我为一些朋友建立了一个v2ray虚拟专用网。在安装过程中,我们需要两个服务器: EU和IR。欧盟服务器位于欧洲,v2ray安装在其上。IR服务器位于国内,并将所有通信量转发给欧盟服务器。这是必要的,因为审查是如此严厉,有时你只能连接到国内服务器。
到目前为止,所有这些都很好,但是我们需要添加更多的EU服务器,而IR服务器应该有选择地将流量转发到EU1或EU2。我们计划为每个欧盟服务器提供一系列端口。因此,如果请求来自v2ray客户端,端口介于10000到19999之间,那么我们希望将其转发到EU1服务器,如果端口在20000至29999之间,则将其转发到EU2。
我们拥有的当前iptables命令如下:
sysctl net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -p tcp --dport 22 -j DNAT --to-destination IR_SERVER_IP
iptables -t nat -A PREROUTING -j DNAT --to-destination EU_SERVER_IP
iptables -t nat -A POSTROUTING -j MASQUERADE我试图理解这些命令,并理解-t nat选择nat表,-p tcp说如果协议是tcp的话。但是--dport 22把我弄糊涂了。每个v2ray连接都有一个唯一的端口,从来都不是22。
为了满足我们的需求,我们需要对命令做什么改变?
发布于 2022-11-14 13:05:09
答案很简单:无论您转发哪个流量,您仍然必须能够管理您的"IR“服务器。这是通过ssh完成的,在默认情况下,ssh正在监听端口22。可能存在DNAT规则,以避免与下一条规则匹配的端口22的通信量,该规则无条件地将目标IP更改为您的EU服务器,无论使用的是哪个协议/端口。
规则iptables -t nat -A PREROUTING -p tcp --dport 22 -j ACCEPT也会做同样的事情(并使其意图更加明确)。如果您知道v2ray流量的目的端口在10000到29999之间,则可以删除此规则,并将这些约束添加到DNAT规则中。
我不熟悉v2ray虚拟专用网,也不知道要与v2ray对话的协议是tcp还是udp -我插入了这两个协议来确定。根据你的描述,这些规则应该做好以下工作:
sysctl net.ipv4.ip_forward=1
# clear all previous rules:
iptables -t nat -F
# add new rules:
iptables -t nat -A PREROUTING -d IR_SERVER_IP -p tcp --dport 10000:19999 -j DNAT --to-destination EU_SERVER_IP1
iptables -t nat -A PREROUTING -d IR_SERVER_IP -p udp --dport 10000:19999 -j DNAT --to-destination EU_SERVER_IP1
iptables -t nat -A PREROUTING -d IR_SERVER_IP -p tcp --dport 20000:29999 -j DNAT --to-destination EU_SERVER_IP2
iptables -t nat -A PREROUTING -d IR_SERVER_IP -p udp --dport 20000:29999 -j DNAT --to-destination EU_SERVER_IP2
iptables -t nat -A POSTROUTING -j MASQUERADE同样,我不知道v2ray,因此我无法判断是否需要更多的端口转发才能使此设置工作。
https://serverfault.com/questions/1115620
复制相似问题