设置中专服务器

好的,这是一个更完善和清晰的教程,包含如何关闭 VPN 功能以及与 FRP 内网穿透可能冲突的说明。

教程目标: 利用一台 Linux 服务器作为 OpenVPN 中转网关,使你的局域网电脑 (如 192.168.5.9) 无需直接连接 VPN 即可访问 VPN 网络资源 (如 10.8.0.4)。

你的网络信息:

  • 客户端电脑 IP: 192.168.5.9
  • 客户端子网: 192.168.5.0/24
  • 客户端默认网关: 192.168.5.254
  • 目标 VPN IP: 10.8.0.4
  • 你的 OpenVPN 配置文件路径 (示例): /home/yuuu/data/vpna40/callisto_zhangyu.ovpn

前提条件:

  1. 中转服务器: 准备一台 Linux 机器 (推荐 Debian/Ubuntu 稳定版),拥有 sudo 权限。
  2. 网络连接: 该 Linux 机器已连接到你的 192.168.5.0/24 网络。
  3. 接口名称: 知道该 Linux 机器的局域网接口名称 (用 ip a 查看, 如 eth0, ens18 等)。
  4. 配置文件: 拥有 .ovpn 文件及可能需要的证书/密钥/用户名密码。
  5. 基本 Linux 操作能力: 熟悉命令行、编辑文件等。
  6. 当前时间 (供参考): 2025年5月6日 星期二 下午4:24:21 CST

详细步骤

第 1 步:准备中转网关服务器

  1. 选择并设置静态 IP 地址:

    • 为中转服务器选择一个未被使用 的 IP,例如 192.168.5.200

    • 查看当前网络接口:

      bash 复制代码
      ip a

      记下你要配置静态 IP 的那个接口的名称 (例如 eth0)。

    • 配置静态 IP (使用 netplan):

      • 编辑 Netplan 配置文件 (/etc/netplan/ 目录下的 .yaml 文件)。

        bash 复制代码
        # 用你的实际配置文件名替换 01-netcfg.yaml
        sudo nano /etc/netplan/01-netcfg.yaml
      • 修改或创建如下内容:

        yaml 复制代码
        network:
          version: 2
          ethernets:
            eth0: # <---- 替换为你的网卡接口名!
              dhcp4: no # 关闭DHCP
              addresses: [192.168.5.200/24] # <---- 设置你选择的静态IP和子网掩码(/24 = 255.255.255.0)
              gateway4: 192.168.5.254 # <---- 设置你的局域网默认网关 (通常是你的主路由器IP)
              nameservers:
                addresses: [114.114.114.114, 8.8.8.8] # <---- 设置 DNS 服务器 (公共DNS或你的路由器)
      • 应用配置并验证:

        bash 复制代码
        sudo netplan apply
        ip addr show eth0 # 替换为你的接口名,检查 IP 是否正确
        ping -c 3 192.168.5.254 # 测试能否 ping 通网关
        ping -c 3 baidu.com # 测试能否访问互联网
  2. 更新系统并安装必要软件:

    bash 复制代码
    sudo apt update && sudo apt upgrade -y
    # 安装 OpenVPN 客户端 和 iptables 规则持久化工具
    sudo apt install openvpn iptables-persistent -y
    # 安装过程中会询问是否保存当前的 IPv4 和 IPv6 规则,选择 <Yes>。
  3. 检查现有防火墙:

    • 有些系统默认启用 ufwfirewalld。如果启用,它们可能会干扰 iptables 规则。

      bash 复制代码
      sudo ufw status
      sudo systemctl status firewalld
    • 如果它们是 active (running) 状态,你需要配置它们以允许转发(较复杂),或者禁用它们 以完全依赖 iptables(更简单,但在安全性上需自行评估):

      bash 复制代码
      # 如果决定禁用 ufw (示例)
      # sudo ufw disable
      # sudo systemctl stop ufw
      # sudo systemctl disable ufw

第 2 步:配置 OpenVPN 客户端

  1. 复制并准备 OpenVPN 配置文件:

    • 将你的 .ovpn 文件 (callisto_zhangyu.ovpn) 传输到中转服务器 (例如用 scp 或 U 盘)。假设它现在位于中转服务器的 ~/ 目录下。

    • 创建 OpenVPN 标准配置目录并将文件复制进去,重命名为 .conf

      bash 复制代码
      sudo mkdir -p /etc/openvpn/client
      sudo cp ~/callisto_zhangyu.ovpn /etc/openvpn/client/callisto_zhangyu.conf
    • 处理依赖文件:

      • 证书/密钥: 如果 .ovpn 文件内使用 ca, cert, key, tls-auth 等指令引用了外部文件 (.crt, .key, ta.key 等),请将这些文件也复制到 /etc/openvpn/client/ 目录下。确保 .conf 文件中引用这些文件时没有路径 ,只有文件名(因为它们在同一目录)。

        bash 复制代码
        # 示例: 如果需要 ca.crt 和 user.key
        # sudo cp ~/ca.crt /etc/openvpn/client/
        # sudo cp ~/user.key /etc/openvpn/client/
      • 用户名/密码: 如果 VPN 需要认证,编辑 .conf 文件:

        bash 复制代码
        sudo nano /etc/openvpn/client/callisto_zhangyu.conf

        找到 auth-user-pass 这一行 (如果存在)。如果它后面没有指定文件名,将其改为 auth-user-pass auth.txt。然后,在 /etc/openvpn/client/ 目录下创建一个 auth.txt 文件:

        bash 复制代码
        sudo nano /etc/openvpn/client/auth.txt

        文件内容为两行:第一行是你的 VPN 用户名,第二行是你的 VPN 密码。保存并退出。
        设置严格权限:

        bash 复制代码
        sudo chmod 600 /etc/openvpn/client/auth.txt
  2. 启动并验证 OpenVPN 连接:

    bash 复制代码
    # 设置服务开机自启
    sudo systemctl enable openvpn-client@callisto_zhangyu
    
    # 立即启动服务
    sudo systemctl start openvpn-client@callisto_zhangyu
    
    # 详细检查服务状态
    sudo systemctl status openvpn-client@callisto_zhangyu --no-pager -l
    # 按 'q' 退出。留意是否有错误信息。
    
    # 查看最新的日志
    sudo journalctl -u openvpn-client@callisto_zhangyu -n 50 --no-pager
    
    # 检查 VPN 网络接口 (通常是 tun0) 是否出现并获得 IP
    ip a | grep tun
    # 应该能看到类似 tun0 的接口和 10.8.x.x 的 IP 地址。记下这个接口名。
    
    # ***关键测试***: 在中转服务器本机 ping 目标 VPN IP
    ping -c 4 10.8.0.4
    # 必须能 ping 通!否则后续步骤无效。按 Ctrl+C 停止。

第 3 步:启用 IP 转发

  1. 编辑 sysctl 配置文件:

    bash 复制代码
    sudo nano /etc/sysctl.conf
  2. 取消注释或添加: 找到 #net.ipv4.ip_forward=1,删除 #。若没有则在末尾添加 net.ipv4.ip_forward=1

  3. 保存并退出。

  4. 立即应用:

    bash 复制代码
    sudo sysctl -p
  5. 验证: cat /proc/sys/net/ipv4/ip_forward 应输出 1

第 4 步:配置防火墙 (iptables) 和 NAT

  1. 再次确认接口名称:

    • 局域网接口 (如 eth0)
    • VPN 接口 (如 tun0)
  2. 设置 iptables 规则 (请将下面命令中的 eth0tun0 替换为你的实际接口名):

    bash 复制代码
    # 规则 1: NAT - 伪装源地址
    # 让从局域网(192.168.5.0/24)来,经VPN接口(tun0)出去的流量,源IP变成tun0的IP
    sudo iptables -t nat -A POSTROUTING -s 192.168.5.0/24 -o tun0 -j MASQUERADE
    # 解释: -t nat 指定操作nat表; -A POSTROUTING 添加到POSTROUTING链(在路由之后修改);
    # -s 源地址范围; -o 出口接口; -j MASQUERADE 进行源地址伪装
    
    # 规则 2: FORWARD - 允许转发特定流量
    # 允许从局域网接口(eth0)进,源于192.168.5.0/24,去往VPN接口(tun0),目标是10.8.0.4的数据包通过
    sudo iptables -A FORWARD -i eth0 -s 192.168.5.0/24 -o tun0 -d 10.8.0.4 -j ACCEPT
    # 解释: -A FORWARD 添加到FORWARD链(控制转发); -i 入口接口; -s 源地址; -o 出口接口; -d 目标地址; -j ACCEPT 允许通过
    
    # 规则 3: FORWARD - 允许返回流量
    # 允许已经建立的连接(RELATED)或属于现有连接(ESTABLISHED)的返回数据包(从VPN接口进,去往局域网接口)通过
    sudo iptables -A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
    # 解释: -m state 使用连接状态匹配; --state RELATED,ESTABLISHED 匹配相关或已建立状态; -j ACCEPT 允许
    
    # (可选,更安全): 如果只想允许你的特定电脑(192.168.5.9)访问,将规则2替换为:
    # sudo iptables -A FORWARD -i eth0 -s 192.168.5.9 -o tun0 -d 10.8.0.4 -j ACCEPT
  3. 保存 iptables 规则使其持久化:

    bash 复制代码
    sudo netfilter-persistent save

第 5 步:配置你的客户端电脑 (192.168.5.9)

  1. 以管理员身份打开 命令提示符(CMD) 或 PowerShell。

  2. 删除旧路由 (如果存在):

    powershell 复制代码
    route delete 10.8.0.4
  3. 添加指向新中转网关的静态路由:

    powershell 复制代码
    # 将 192.168.5.200 替换为你给中转服务器设置的实际静态 IP
    route add 10.8.0.4 mask 255.255.255.255 192.168.5.200 -p
  4. 验证路由是否添加成功: route print -4 (查找目标为 10.8.0.4 的条目)。

第 6 步:测试

  1. 确保中转服务器 (192.168.5.200) 运行正常,OpenVPN 已连接。
  2. 在客户端电脑 (192.168.5.9) 上,确保没有运行 OpenVPN 客户端
  3. 尝试 ping 10.8.0.4
  4. 尝试访问依赖 10.8.0.4 的网络服务。

第 7 步:如何停止/禁用 VPN 网关功能

当你不再需要这个中转功能时,可以按以下步骤操作:

  1. 在客户端电脑 (192.168.5.9) 上:

    • 以管理员身份打开 CMD 或 PowerShell。

    • 删除静态路由:

      powershell 复制代码
      route delete 10.8.0.4
  2. 在中转网关服务器 (192.168.5.200) 上:

    • 停止 OpenVPN 服务:

      bash 复制代码
      sudo systemctl stop openvpn-client@callisto_zhangyu
    • (可选) 禁止 OpenVPN 服务开机自启:

      bash 复制代码
      sudo systemctl disable openvpn-client@callisto_zhangyu
    • (可选) 禁用 IP 转发:

      bash 复制代码
      # 临时禁用
      sudo sysctl -w net.ipv4.ip_forward=0
      # 永久禁用 (编辑 /etc/sysctl.conf, 将 net.ipv4.ip_forward=1 改回 0 或注释掉)
      # sudo nano /etc/sysctl.conf
      # sudo sysctl -p
    • (可选) 清除添加的 iptables 规则:

      • 最简单的方法是重启服务器(如果规则没有完全持久化或者你想恢复到默认状态)。

      • 或者手动删除规则 (用 iptables -D 加上规则内容,例如 sudo iptables -t nat -D POSTROUTING -s 192.168.5.0/24 -o tun0 -j MASQUERADE)。

      • 或者清除所有规则并保存空规则集(慎用!会清除所有规则 ):

        bash 复制代码
        # sudo iptables -F # 清空 filter 表规则
        # sudo iptables -t nat -F # 清空 nat 表规则
        # sudo iptables -X # 删除自定义链
        # sudo netfilter-persistent save # 保存空规则

第 8 步:与 FRP 内网穿透的潜在冲突说明

如果你计划在同一台 中转网关服务器 (192.168.5.200) 上同时运行 OpenVPN 客户端 (作为网关)FRP 客户端 (frpc) (或其他类似内网穿透工具,如 ngrok、cloudflared tunnel),可能会遇到冲突,主要是路由冲突

  • 冲突原因:
    1. 默认路由 (redirect-gateway): 如果你的 OpenVPN 配置文件中包含 redirect-gateway def1 或类似选项,它会强制服务器的所有出站流量(包括 frpc 连接 frps 服务器的流量)都通过 VPN 隧道。如果 frps 服务器位于公共互联网,而 VPN 提供商阻止某些连接或 VPN 连接不稳定,frpc 可能无法连接或连接缓慢。
    2. 路由表影响: 即使没有 redirect-gateway,OpenVPN 也会添加特定的路由。这可能影响 frpc 选择哪个网络接口和哪个源 IP 地址去连接 frps 服务器。例如,frpc 可能错误地尝试使用 VPN 的 tun0 接口 IP 作为源 IP 去连接公网的 frps,导致连接失败。
  • 如何避免或缓解:
    1. 检查 OpenVPN 配置: 确保你的 callisto_zhangyu.conf 文件中没有 redirect-gateway def1 指令,除非你明确需要所有流量都走 VPN。只让 OpenVPN 推送必要的私有网络路由(例如 route 10.8.0.0 255.255.255.0)通常是更好的选择。
    2. 策略路由 (高级): 在 Linux 上使用 ip ruleip routefrpc 进程或目标 frps 服务器的流量指定一个不同的路由表,强制它使用物理网卡 (eth0) 和你的主路由器 (192.168.5.254) 出去。这配置较为复杂。
    3. FRP 绑定源 IP (若支持): 检查 frpc 的配置文件 (frpc.ini) 是否支持 bind_addr 或类似选项,尝试将其绑定到服务器的物理 IP (192.168.5.200)。
    4. 分离服务 (最简单可靠): 将 OpenVPN 网关功能和 FRP 内网穿透功能部署在两台不同的机器(或虚拟机)上。这是避免潜在冲突的最简单方法。

第 9 步:故障排除提示

  • 客户端 ping 不通 10.8.0.4: 逐步检查:客户端路由是否正确?中转服务器防火墙/NAT/转发是否配置正确?中转服务器自身 VPN 是否连接且能 ping 通 10.8.0.4
  • 中转服务器 VPN 连不上: 检查 OpenVPN 日志 (journalctl),确认配置文件、证书/密钥、用户名/密码是否正确,网络连接是否正常。
  • 中转服务器无法上网: 如果配置了 redirect-gateway 或者路由/DNS 设置错误,可能导致中转服务器自身无法访问互联网。检查 /etc/resolv.confip route show

这个更详细的教程应该能更好地指导你完成设置。祝你成功!

相关推荐
啟明起鸣15 小时前
【Nginx 网关开发】上手 Nginx,简简单单启动一个静态 html 页面
运维·c语言·前端·nginx·html
lisanmengmeng15 小时前
添加ceph节点
linux·服务器·ceph
Tinyundg15 小时前
Linux系统分区
linux·运维·服务器
要做一个小太阳15 小时前
华为Atlas 900 A3 SuperPoD 超节点网络架构
运维·服务器·网络·华为·架构
江畔何人初15 小时前
service发现
linux·运维·云原生
life码农15 小时前
Linux系统清空文件内容的几种方法
linux·运维·chrome
zbguolei16 小时前
虚拟机安装Ubuntu后无法登录
linux·运维·ubuntu
UP_Continue16 小时前
Linux--基础IO
linux·运维·服务器
驱动探索者16 小时前
linux hwspinlock 学习
linux·运维·学习
FJW02081416 小时前
使用HAProxy实现动静分离
linux·服务器