You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

FreshTomato 2021.2(R7000)下OpenVPN客户端内端口转发至LAN服务器的配置故障排查请求

FreshTomato 2021.2(R7000)下OpenVPN客户端内端口转发至LAN服务器的配置故障排查请求

看起来你卡在了OpenVPN客户端隧道内端口转发到LAN服务器的问题上,我结合你给出的iptables规则和现象帮你分析下问题点,再给出具体的解决步骤:

首先先把你当前的iptables规则整理出来方便查看:

-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-N shlimit
-N upnp
-N wanin
-N wanout
-A INPUT -i tun21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -m state --state INVALID -j DROP
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -j shlimit
-A INPUT -i lo -j ACCEPT
-A INPUT -i br0 -j ACCEPT
-A FORWARD -i tun11 -m state --state NEW -j wanin
-A FORWARD -i tun21 -j ACCEPT
-A FORWARD -o tun11 -j ACCEPT
-A FORWARD -m account --aaddr 21.9.12.0/255.255.255.0 --aname lan
-A FORWARD -i br0 -o br0 -j ACCEPT
-A FORWARD -m state --state INVALID -j DROP
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i vlan2 -j wanin
-A FORWARD -o vlan2 -j wanout
-A FORWARD -i vlan3 -j wanin
-A FORWARD -o vlan3 -j wanout
-A FORWARD -i br0 -j ACCEPT
-A FORWARD -i vlan2 -j upnp
-A shlimit -m recent --set --name shlimit --mask 255.255.255.255 --rsource
-A shlimit -m recent --update --seconds 60 --hitcount 4 --name shlimit --mask 255.255.255.255 --rsource -j DROP
-A upnp -d 21.9.12.153/32 -p udp -m udp --dport 9308 -j ACCEPT
-A upnp -d 21.9.12.153/32 -p udp -m udp --dport 9305 -j ACCEPT
-A upnp -d 21.9.12.92/32 -p udp -m udp --dport 59319 -j ACCEPT
-A wanin -d 21.9.12.211/32 -p tcp -m tcp --dport 80 -j ACCEPT
-A wanin -d 21.9.12.211/32 -p udp -m udp --dport 80 -j ACCEPT
-A wanin -d 21.9.12.211/32 -p tcp -m tcp --dport 443 -j ACCEPT
-A wanin -d 21.9.12.211/32 -p udp -m udp --dport 443 -j ACCEPT
-A wanin -d 21.9.12.211/32 -p tcp -m tcp --dport 64246 -j ACCEPT
-A wanin -d 21.9.12.211/32 -p udp -m udp --dport 64246 -j ACCEPT

核心问题分析

你当前的配置有两个关键缺失:

  1. 缺少DNAT(目标地址转换)规则:wanin链只是允许了到21.9.12.211的80/443流量转发,但没有把VPN公网IP(172.94..*)的80/443请求转换到LAN服务器的IP上——这是端口转发的核心步骤,没有DNAT,外部请求的目标还是VPN公网IP,路由器不知道要把它发给LAN服务器。
  2. 回程路由不匹配:你提到telnet能连上但HTTP请求发送后就断开,这典型是单向连通问题——客户端发的SYN包能到服务器,但服务器的SYN-ACK回程流量没走OpenVPN隧道,而是走了默认的WAN口,导致客户端收不到回复,最终连接断开。

具体解决步骤

1. 添加DNAT规则(端口转发核心)

需要在nat表的PREROUTING链添加规则,把tun11接口进来的80/443请求转发到LAN服务器:

# 转发TCP 80到LAN服务器
iptables -t nat -A PREROUTING -i tun11 -p tcp --dport 80 -j DNAT --to-destination 21.9.12.211:80
# 转发TCP 443到LAN服务器
iptables -t nat -A PREROUTING -i tun11 -p tcp --dport 443 -j DNAT --to-destination 21.9.12.211:443

注:你之前的wanin里加了UDP的80/443规则,一般HTTP/HTTPS不需要UDP,如果你没特殊需求可以忽略UDP部分。

2. 配置回程路由(解决单向连通)

需要让LAN服务器21.9.12.211的回程流量通过tun11隧道返回,有两种方式:

  • 命令行临时配置
    先查看tun11的网关IP(可以用ifconfig tun11查看,一般是隧道的远端IP),然后添加策略路由:
    # 让来自21.9.12.211的流量使用表100路由
    ip rule add from 21.9.12.211 table 100
    # 给表100添加默认路由,指向tun11的网关
    ip route add default via <tun11网关IP> table 100
    
  • FreshTomato Web界面配置(永久生效)
    进入OpenVPN客户端设置页面,找到「Redirect Internet traffic」选项,选择「Policy Rules (strict)」,然后添加一条规则:
    • 源IP:21.9.12.211
    • 目标:Any
    • 动作:通过此VPN客户端

3. 验证配置

  • 执行iptables -t nat -L PREROUTING -v查看DNAT规则是否已经生效,能看到对应规则的数据包计数。
  • 从外部再次测试HTTP/HTTPS访问,同时可以在路由器上抓tun11接口的流量,确认请求到达服务器,且回程流量通过tun11返回。

额外检查点

  • 确认LAN服务器21.9.12.211的防火墙没有阻止来自tun11段的80/443请求。
  • 确认OpenVPN客户端的配置里没有禁用端口转发相关的选项(比如client-to-client等,不过FreshTomato默认应该是允许的)。

备注:内容来源于stack exchange,提问作者smallfrenchy

火山引擎 最新活动