You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ens19接口流量转发至OpenVPN tun0接口失败的技术排查求助

ens19接口流量转发至OpenVPN tun0接口失败的技术排查求助

需求说明

我想要实现一台计算机将内部接口ens19的所有流量转发至OpenVPN接口tun0。系统配置了两个物理接口:

  • ens18:连接本地网络,通过Fritzbox接入互联网
  • ens19:连接另一自有网络,计划通过tun0走OpenVPN通道

环境配置

我在Proxmox上部署了两台虚拟机:一台Debian 11,一台Ubuntu 22(第一台配置失败后,想排除系统差异问题,两台都作为路由器使用,IP地址不同)。两台虚拟机的基础配置完全一致:

  • 安装无GUI的最小化系统及依赖
  • 安装必备软件:apt install iptables openvpn

内核转发配置

已开启IP转发功能,/etc/sysctl.conf中过滤注释后的有效配置如下:

net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.all.forwarding = 1
net.ipv4.conf.all.accept_redirects = 1
net.ipv4.conf.all.send_redirects = 1

iptables规则配置

我用脚本配置了iptables规则(已执行生效),脚本内容如下:

#!/bin/bash

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

# 以下为实验性规则,已注释
#iptables -A INPUT -i tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
#iptables -A INPUT -o ens19 -m state --state RELATED,ESTABLISHED -j ACCEPT
#iptables -A INPUT -i tun0 -o ens19 -m state --state RELATED,ESTABLISHED -j ACCEPT
#iptables -t nat -A PREROUTING -i ens19 -j ACCEPT
#iptables -A FORWARD -j ACCEPT
#iptables -A FORWARD -i ens19 -j ACCEPT
#iptables -t nat -s 192.168.1.0/24 -A POSTROUTING -o tun0 -j MASQUERADE
#iptables -t nat -A POSTROUTING -j MASQUERADE

iptables -A FORWARD -i ens19 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o ens19 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i tun0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i tun0 -m state --state New,RELATED,ESTABLISHED -j ACCEPT

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

iptables-save | sudo tee /etc/iptables/rules.v4
exit

当前生效的iptables规则(iptables-save输出)

# Generated by iptables-save v1.8.7 on Tue Jan  9 ...
*filter
:INPUT ACCEPT [40976:12561334]
:FORWARD ACCEPT [32894:54259570]
:OUTPUT ACCEPT [32983:2879147]
-A INPUT -i tun0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i ens19 -o tun0 -j ACCEPT
-A FORWARD -i tun0 -o ens19 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i tun0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Tue Jan  9 ...

# Generated by iptables-save v1.8.7 on Tue Jan  9 ...
*nat
:PREROUTING ACCEPT [63033:10635529]
:INPUT ACCEPT [6276:710107]
:OUTPUT ACCEPT [1569:103282]
:POSTROUTING ACCEPT [1156:77777]
-A POSTROUTING -o tun0 -j MASQUERADE
COMMIT
# Completed on Tue Jan  9 ...

OpenVPN服务状态

已启动OpenVPN服务:sudo systemctl start openvpn@openvpn,服务加载的配置文件为/etc/openvpn/openvpn.conf

问题现象

执行测试命令后得到如下结果:

  • ping web.de -I ens18:正常连通(通过Fritzbox的互联网接口)
  • ping web.de -I ens19:无法连通,但能正常解析到web.de的IP地址
  • ping web.de -I tun0:正常连通(通过OpenVPN接口)

我自己猜测:NAT配置应该是生效的,但ens19到tun0的流量转发环节出了问题。我查了很多论坛的类似解决方案,照着配置后还是没解决,实在搞不懂哪里漏了,求各位帮忙排查!

额外排查信息

路由表(ip route show输出)

0.0.0.0/1 via ***.1 dev tun0
default via 192.168.178.254 dev ens18 proto static
***.0/24 dev tun0 proto kernel scope link src ***
128.0.0.0/1 via <...>.1 dev tun0
*** via 192.168.178.254 dev ens18
192.168.1.0/24 dev ens19 proto kernel scope link src 192.168.1.1
192.168.178.0/24 dev ens18 proto kernel scope link src 192.168.178.6

注:***为敏感IP地址已隐藏;192.168.178.0是ens18连接的Fritzbox网络,192.168.1.0是ens19连接的自有网络,192.168.1.1是VPN路由器自身IP,192.168.1.254是自有网络指向Fritzbox的网关

路由规则(ip rule show输出)

0:  from all lookup local
32766:  from all lookup main
32767:  from all lookup default

抓包信息

已在独立终端执行sudo tcpdump -i ens19,并同时执行ping web.de -I ens19,抓包记录了ping的完整过程。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 09:13:12