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

如何配置通过OpenVPN访问服务器的SSH连接并解决IP限制问题

解决OpenVPN连接后无法SSH到服务器的问题

嘿,我完全懂你的困扰——你通过hosts.allowhosts.deny把SSH访问限制在了指定公网IP,但OpenVPN客户端走的是10.8.0.x这类内网网段,自然被hosts.denysshd : ALL给拦住了。下面给你几个实用的解决思路,按需选就行:

方法一:直接将OpenVPN网段加入hosts.allow

这是最省心的方案,直接把OpenVPN的客户端子网添加到允许列表:

  • 编辑/etc/hosts.allow文件,在现有规则下方新增一行:
    sshd : 10.8.0.0/24
    
    如果你修改过OpenVPN的默认网段,记得把10.8.0.0/24替换成你实际使用的子网段。
  • 保存文件后无需重启服务,tcpwrappers会自动加载新规则。

方法二:用OpenVPN脚本动态管理允许列表

如果你的OpenVPN客户端IP是动态分配的,或者想实现“连接时自动放行、断开时自动移除”的灵活控制,可以用OpenVPN的客户端钩子脚本:

  1. 创建连接触发脚本/etc/openvpn/client-connect.sh,内容如下:
    #!/bin/bash
    echo "sshd : $ifconfig_pool_remote_ip" >> /etc/hosts.allow
    
  2. 创建断开触发脚本/etc/openvpn/client-disconnect.sh
    #!/bin/bash
    sed -i "/sshd : $ifconfig_pool_remote_ip/d" /etc/hosts.allow
    
  3. 给两个脚本添加执行权限:
    chmod +x /etc/openvpn/client-connect.sh /etc/openvpn/client-disconnect.sh
    
  4. 编辑OpenVPN服务器配置文件(通常是/etc/openvpn/server.conf),添加两行配置:
    client-connect /etc/openvpn/client-connect.sh
    client-disconnect /etc/openvpn/client-disconnect.sh
    
  5. 重启OpenVPN服务让配置生效:
    systemctl restart openvpn@server
    

方法三:改用iptables替代tcpwrappers

如果你觉得hosts.allow/hosts.deny的控制粒度不够,也可以用iptables来实现更灵活的SSH访问控制,同时覆盖公网IP和OpenVPN网段:

  • 添加允许规则,然后拒绝其他所有SSH请求:
    iptables -A INPUT -p tcp --dport 22 -s x.x.x.x -j ACCEPT
    iptables -A INPUT -p tcp --dport 22 -s 10.8.0.0/24 -j ACCEPT
    iptables -A INPUT -p tcp --dport 22 -j DROP
    
    x.x.x.x替换成你原来允许的公网IP,10.8.0.0/24替换为你的OpenVPN网段。
  • 记得保存iptables规则,避免重启后失效:Debian/Ubuntu用iptables-save > /etc/iptables/rules.v4,CentOS/RHEL用service iptables save

这三个方案各有侧重:方法一适合固定网段的简单场景,方法二更适合动态IP的灵活管控,方法三则是功能更强的防火墙级控制。挑最适合你的就行~

内容的提问来源于stack exchange,提问作者jamiryo

火山引擎 最新活动