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

Ubuntu 24.04下编译安装的Strongswan 5.9.14 VPN服务器无法响应客户端连接请求求助

Ubuntu 24.04下编译安装的Strongswan 5.9.14 VPN服务器无法响应客户端连接请求求助

我来帮你一步步排查这个问题,咱们从最基础的点开始确认,逐步缩小范围:

  • 先确认Strongswan服务是否真的正常运行
    别光看服务显示“已启动”,得确认核心进程在正常干活。你可以执行:
    systemctl status strongswan
    看看charon进程有没有正常运行,有没有红色的错误提示。也可以用swanctl --stats查看IPsec统计数据,如果连基础的统计信息都出不来,说明服务可能没完成初始化。
    如果服务启动失败,直接看启动日志找线索:journalctl -u strongswan --no-pager -b,说不定是编译时漏装了某个依赖,导致组件加载失败。

  • 检查编译参数是否遗漏了关键功能
    你给出的编译命令后面截断了(--enable-eap-m...),要确保你启用了客户端需要的认证模块——比如如果客户端用EAP-TLS或者EAP-MSCHAPv2,对应的模块必须开启。另外,Ubuntu 24.04用的是6.x内核,--enable-kernel-netlink这个参数必须正常生效,不然Strongswan没法和内核交互处理IPsec流量。
    你可以用strongswan --version查看编译好的模块列表,确认ikev2、charon、socket-default这些核心模块都在输出里。

  • 强制开启详细日志,抓关键线索
    默认日志级别太低可能啥都看不到,咱们手动调高日志等级:
    编辑/etc/strongswan.d/charon/logging.conf,找到filelog部分,把default_level改成4或者5(数字越大日志越详细),然后重启服务:systemctl restart strongswan
    之后打开一个终端实时跟踪日志:journalctl -u strongswan -f,同时让客户端发起连接,看看有没有任何日志输出——哪怕是错误信息,都能帮我们判断是服务器没收到包,还是收到了但处理出错。

  • 用tcpdump确认网络层面是否收到请求
    有时候防火墙看起来开了,但实际可能有其他规则拦截,或者路由问题导致包没到服务器。咱们直接抓包验证:
    执行tcpdump -i any port 500 or port 4500,然后让客户端发起连接,看终端里有没有显示来自客户端IP的包。

    • 如果抓不到包:那问题不在Strongswan本身,得检查网络路由、端口转发(如果服务器在NAT后面)、或者云服务商的安全组(如果是云服务器)。
    • 如果能抓到包但Strongswan没日志:那就是服务没处理这些包,大概率是编译时的模块缺失,或者配置文件有问题。
  • 用极简配置测试排除复杂配置干扰
    先别用复杂的证书或EAP配置,写个极简的预共享密钥(PSK)配置试试,排除配置错误的可能:
    编辑/etc/swanctl/swanctl.conf,替换成下面的内容(记得替换占位符):

    connections {
        test-vpn {
            version = 2
            local_addrs = 你的服务器公网IP
            remote_addrs = %any
            proposals = aes256-sha256-modp2048
            dpd_delay = 30
            dpd_timeout = 120
            dpd_action = restart
            local {
                auth = psk
                id = 你的服务器域名或IP
            }
            remote {
                auth = psk
                id = %any
            }
            children {
                test-child {
                    local_ts = 0.0.0.0/0
                    remote_ts = 0.0.0.0/0
                    esp_proposals = aes256-sha256
                    start_action = accept
                }
            }
        }
    }
    secrets {
        ike-psk {
            id-1 = 你的服务器域名或IP
            id-2 = %any
            secret = "你的预共享密钥字符串"
        }
    }
    

    配置好后加载配置:swanctl --load-all,然后用swanctl --list-conns确认配置已经加载成功,再让客户端用对应的PSK配置连接试试。

  • 检查内核转发参数是否正确配置
    Strongswan需要内核开启IP转发才能正常工作,Ubuntu 24.04默认可能没开。编辑/etc/sysctl.conf,添加或修改以下参数:

    net.ipv4.ip_forward = 1
    net.ipv4.conf.all.accept_redirects = 0
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.default.accept_redirects = 0
    net.ipv4.conf.default.send_redirects = 0
    net.ipv4.conf.all.rp_filter = 0
    net.ipv4.conf.default.rp_filter = 0
    # 如果需要支持IPv6,再加下面这行
    net.ipv6.conf.all.forwarding = 1
    

    执行sysctl -p让参数生效,这一步很容易被忽略,但却是IPsec正常工作的基础。

按照上面的步骤一步步排查,应该能找到问题所在。如果某个步骤有异常,随时把输出信息贴出来,咱们再针对性分析。

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

火山引擎 最新活动