设置中专服务器

好的,这是一个更完善和清晰的教程,包含如何关闭 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

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

相关推荐
敲上瘾42 分钟前
从明文裸奔到密钥长城:HTTPS加密全链路攻防与CA信任锚点构建
服务器·网络·网络协议·http·网络安全·https·密码学
zzr9151 小时前
深入探讨 UDP 协议与多线程 HTTP 服务器
linux·服务器·网络协议·tcp/ip·ubuntu·http·udp
宇亲3 小时前
Win11/Win10无法保存ip设置提示请检查一个或多个设置并重试怎么办?
运维·服务器
苏音资源3 小时前
宝塔docker拉取仓库失败 完美加速方法
运维·docker·容器
独行soc7 小时前
2025年渗透测试面试题总结-某战队红队实习面经(附回答)(题目+回答)
linux·运维·服务器·学习·面试·职场和发展·渗透测试
星川皆无恙8 小时前
大数据产品销售数据分析:基于Python机器学习产品销售数据爬虫可视化分析预测系统设计与实现
大数据·运维·爬虫·python·机器学习·数据分析·系统架构
sky北城9 小时前
Jenkins忘记admin密码后的恢复步骤
运维·jenkins
FBI HackerHarry浩10 小时前
Linux云计算训练营笔记day02(Linux、计算机网络、进制)
linux·运维·网络·笔记·计算机网络·进制
乐言36110 小时前
接口自动化工具如何选择?以及实战介绍
运维·自动化
一颗星星辰11 小时前
网络安全专题 | 第十章 | 防火墙基础配置 | 安全策略
服务器·网络·web安全