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

Arch Linux下OpenVPN黑名单式分流配置问题求助

Arch Linux下OpenVPN黑名单式分流配置问题求助

首先非常理解你现在的困扰,纤维肌痛确实会让人在处理这类技术问题时更费力,咱们一步一步来梳理解决你的问题——让大部分流量走VPN,只让Netflix、Disney+、Prime Video这类流媒体网站走本地网络。

为什么你当前的配置没生效?

你的思路是对的,但有两个核心问题:

  1. 路由命令可能被服务器配置覆盖:OpenVPN的pull命令会拉取服务器推送的路由规则,如果你的自定义路由放在pull之前,很可能会被服务器的配置覆盖;另外,你之前放命令的位置其实是合法的,但更稳妥的是放在配置文件最末尾,避免被块标签影响。
  2. 流媒体域名对应大量IP:像Netflix这类网站有成百上千个IP地址,你添加的单个route命令只能针对一个IP,根本覆盖不全,所以这些网站还是会走VPN,导致加载异常。

具体解决步骤

第一步:调整自定义命令的位置

把以下内容移动到你的.ovpn文件的最底部(也就是所有<ca>、<tls-auth>等块之后):

allow-pull-fqdn
route www.netflix.com 255.255.255.255 net_gateway
route www.disneyplus.com 255.255.255.255 net_gateway
route www.primevideo.com 255.255.255.255 net_gateway

这样能确保你的自定义路由不会被服务器推送的配置覆盖。

第二步:解决多IP覆盖问题(核心)

因为流媒体网站的IP太多,手动添加根本不现实,我们可以用OpenVPN启动脚本来自动解析域名的所有IP并添加路由:

  1. 创建一个脚本文件,比如/etc/openvpn/exclude-streaming.sh,内容如下:
#!/bin/bash

# 定义需要排除的流媒体域名
STREAM_DOMAINS=("www.netflix.com" "www.disneyplus.com" "www.primevideo.com")
# 获取本地默认网关(就是你不用VPN时的网关)
LOCAL_GATEWAY=$(ip route show default | awk '/default/ {print $3}')

if [ "$script_type" = "up" ]; then
    # 连接VPN时,为每个域名的所有IP添加路由
    for DOMAIN in "${STREAM_DOMAINS[@]}"; do
        # 解析域名的所有A记录IP
        dig +short +answer "$DOMAIN" A | while read -r IP; do
            route add -host "$IP" gw "$LOCAL_GATEWAY"
            # 把添加的路由记录下来,方便断开时删除
            echo "$IP" >> /tmp/openvpn_excluded_ips.txt
        done
    done
elif [ "$script_type" = "down" ]; then
    # 断开VPN时,删除之前添加的路由
    if [ -f /tmp/openvpn_excluded_ips.txt ]; then
        while read -r IP; do
            route del -host "$IP" gw "$LOCAL_GATEWAY" 2>/dev/null
        done < /tmp/openvpn_excluded_ips.txt
        rm /tmp/openvpn_excluded_ips.txt
    fi
fi
  1. 给脚本添加执行权限:
sudo chmod +x /etc/openvpn/exclude-streaming.sh
  1. 在你的.ovpn文件最底部添加以下两行,让OpenVPN连接/断开时自动运行这个脚本:
up /etc/openvpn/exclude-streaming.sh
down /etc/openvpn/exclude-streaming.sh

第三步:测试配置

  1. 启动VPN,然后用traceroute www.netflix.com查看路由,如果第一跳是你的本地网关(而不是VPN服务器的IP),说明配置生效了。
  2. 也可以访问流媒体网站,看看是否能正常加载内容,同时用curl -s https://api.ipify.org确认其他流量仍走VPN的IP。

额外注意事项

  • 确保你的系统安装了dig工具(属于bind-tools包,Arch Linux下可以用sudo pacman -S bind-tools安装),脚本需要它来解析IP。
  • 如果还是有问题,可以检查OpenVPN的日志(journalctl -u openvpn@你的配置文件名),看看有没有报错信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 07:54:34