Pluto 未在 ipsec VPN 上找到接口

Pluto 未在 ipsec VPN 上找到接口

我正在尝试设置 ipsec,但 pluto 似乎未绑定到公共 IP,并且 IPsec 内核需要更新。

这是我到目前为止所想到的:-IPSec 验证表明我的内核不支持 IPsec

-我已经让 VPS 提供商在主机上的 openvz 环境中启用了 IPSec,但是他们声明我必须重建内核,并为我提供了通用 Linux 内核的 Linux 内核存档站点的链接。

-我已经尝试构建内核并安装它,但我似乎无法正确安装它。我做的最后一步是“mkinitramfs -o initrd.img-3.16.3 3.16.3”

-教程规定使用 grub 做一些事情,但是我在 VPS 上并且不认为 grub 甚至在我的 VPS 映像上?我遵循的一个教程:http://www.cyberciti.biz/tips/compiling-linux-kernel-26.html

  • 我尝试了一些 grub 命令,但似乎什么也没有。如何从容器内将内核写入 VPS 容器?

-我已经放弃从源代码构建并找到 *.deb 内核包并尝试安装它们,它们似乎解压并且没有出现任何错误,但是当我重新启动时它仍然是旧内核,是否有一个特殊的命令可以使用dpkg-buildpackage 使其安装?由于它是 VPS,因此它是否因没有引导加载程序而出现安装问题?(假设容器不包含引导加载程序?)

这是我的 ipsec 输出,但我认为问题的一部分是内核:

Sep 18 04:36:45 shiftmy ipsec_setup: Starting Openswan IPsec 2.6.41...
Sep 18 04:36:45 shiftmy ipsec_setup: Using NETKEY(XFRM) stack
Sep 18 04:36:45 shiftmy ipsec_setup: multiple ip addresses, using  127.0.0.2 on venet0
Sep 18 04:36:45 shiftmy ipsec_setup: ...Openswan IPsec started
Sep 18 04:36:45 shiftmy ipsec__plutorun: adjusting ipsec.d to /etc/ipsec.d
Sep 18 04:36:45 shiftmy pluto: adjusting ipsec.d to /etc/ipsec.d
Sep 18 04:36:45 shiftmy ipsec__plutorun: 002 added connection description "L2TP-PSK-noNAT"
Sep 18 04:36:45 shiftmy ipsec__plutorun: 003 no public interfaces found

这是我的接口文件,我在某处读到 ipsec 绑定到接口列表中第一个默认接口。在这种情况下 venet0 127.0.0.2 而公共 IP 位于 venet0:0 107.161.xx.xx(不确定这是否是问题)我的 VPS 提供商接口文件已锁定,因此我无法修改该部分,我相信所有流量都来自107.161.xx.xx 到 127.0.0.2 连接到 openvz 主机(又名网关)。

root@shiftmy:/etc/network# cat /etc/network/interfaces
# This configuration file is auto-generated.
#
# WARNING: Do not edit this file, your changes will be lost.
# Please create/edit /etc/network/interfaces.head and
# /etc/network/interfaces.tail instead, their contents will be
# inserted at the beginning and at the end of this file, respectively.
#
# NOTE: it is NOT guaranteed that the contents of /etc/network/interfaces.tail
# will be at the very end of this file.
#

# Auto generated lo interface
auto lo
iface lo inet loopback

# Auto generated venet0 interface
auto venet0
iface venet0 inet manual
        up ifconfig venet0 up
        up ifconfig venet0 127.0.0.2
        up route add default dev venet0
        down route del default dev venet0
        down ifconfig venet0 down


iface venet0 inet6 manual
        up route -A inet6 add default dev venet0
        down route -A inet6 del default dev venet0

auto venet0:0
iface venet0:0 inet static
        address 107.161.xx.xx
        netmask 255.255.255.255

我一直在网上搜索“ipsec__plutorun: 003 no public Interfacefound”问题,但找不到太多帮助。不确定这是否是真正的问题,因为我相信我正确设置了接口。

ipsec 验证也失败:

Version check and ipsec on-path                         [OK]
Openswan U2.6.41/K(no kernel code presently loaded)
See `ipsec --copyright' for copyright information.
Checking for IPsec support in kernel                    [FAILED]

 The ipsec service should be started before running 'ipsec verify'

Hardware random device check                            [N/A]
Two or more interfaces found, checking IP forwarding    [OK]
Checking rp_filter                                      [ENABLED]
 /proc/sys/net/ipv4/conf/all/rp_filter                  [ENABLED]
Checking that pluto is running                          [OK]
 Pluto listening for IKE on udp 500                     [FAILED]
 Pluto listening for IKE on tcp 500                     [NOT IMPLEMENTED]
 Pluto listening for IKE/NAT-T on udp 4500              [DISABLED]
 Pluto listening for IKE/NAT-T on tcp 4500              [NOT IMPLEMENTED]
 Pluto listening for IKE on tcp 10000 (cisco)           [NOT IMPLEMENTED]
Checking NAT and MASQUERADEing                          [TEST INCOMPLETE]
Checking 'ip' command                                   [OK]
Checking 'iptables' command                             [OK]

ipsec verify: encountered errors

我读过,如果 ipsec 未正确启动,它可能会失败,并在清单的某些部分显示错误的失败。 IPsec 似乎正在“运行”,我不确定内核支持是否真的不存在,或者是否是一个错误的故障?也不知道如何修复冥王星故障。

我遵循了各种指南,但似乎无法克服这个问题。

ipsec 配置:

root@shiftmy:/etc/network# cat /etc/ipsec.conf
version 2.0     # conforms to second version of ipsec.conf specification

config setup
        interfaces=%defaultroute
        dumpdir=/var/run/pluto/
        nat_traversal=yes
        virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v6:fd00::/8,%v6:fe80::/10
        oe=off
        protostack=auto
        protostack=netkey
        force_keepalive=yes
        keep_alive=60

conn L2TP-PSK-noNAT
        authby=secret
        pfs=no
        auto=add
        keyingtries=3
        ikelifetime=8h
        keylife=1h
        ike=aes256-sha1;modp1024!
        phase2alg=aes256-sha1;modp1024
        type=transport
        left=107.161.xx.xx
        leftprotoport=17/1701
        right=%any
        rightprotoport=17/%any
        dpddelay=10
        dpdtimeout=20
        dpdaction=clear

ipsec 秘密:

root@shiftmy:/etc/network# cat /etc/ipsec.secrets
107.161.xx.xx %any: PSK "<key here>"
#include /var/lib/openswan/ipsec.secrets.inc

答案1

最终这个问题的答案是 openVZ VPS 提供商必须有一个支持 ipsec 的内核,并且必须在主机上启用 ipsec 模块。我们的一些提供商不会这样做,因为这对主机来说是一个很大的变化。相反,我们发现所有提供商都支持 openvpn 协议,并且我们与提供商一起在所有 openvz VPS 上启用了“tun”。

答案2

我在尝试让 openswan/ipsec/pluto 在 Docker 容器中工作时遇到了类似的问题。使用与我完全相同的基本配置,它可以在 VirtualBox Ubuntu 14.04 虚拟机上运行。

我遇到的问题是在我的 Arch Linux 主机上使用 Docker 运行 Ubuntu 14.04 映像。

我相信问题的本质是这一行:

pluto[439]: no public interfaces found

要真正深入研究这一点,我必须查看源代码:

apt-get source openswan

可以追溯到这里的源代码:

    openswan-2.6.38/programs/pluto/server.c:462:find_ifaces(void)                         
    openswan-2.6.38/programs/pluto/sysdep_bsd.c:201: find_raw_ifaces4(void)               
    openswan-2.6.38/programs/pluto/server.c:477:loglog(RC_LOG_SERIOUS, "no public interfaces found");

而在 VirtualBox Ubuntu 14.04 上,它可以很好地找到 eth0 及其地址。

从本质上讲,这段代码可能没有返回任何接口:

    openswan-2.6.38/programs/pluto/sysdep_bsd.c:243: find_raw_ifaces4() : if (ioctl(master_sock, SIOCGIFCONF, &ifconf) == -1)

因此,为了解决这个问题,我发现 Docker 限制了对网络设备的访问(它默认创建到主机的桥接)和加载/卸载内核模块(ipsec 加载和卸载内核模块)。因此,我必须授予 Docker 访问所有内容的权限,包括使用主机的原始网络接口:

docker run --cap-add=ALL --net=host -it ubuntu /bin/bash

尽管这不是问题的完整答案,但希望它能引导其他人找出自己的配置出了什么问题。理想情况下,pluto 会提供更多关于它找到的网络设备以及为什么其他设备不合适(即不公开)的信息。

相关内容