IPsec VPN에서 Pluto를 찾을 수 없음 인터페이스

IPsec VPN에서 Pluto를 찾을 수 없음 인터페이스

IPsec을 설정하려고 하는데 pluto가 공용 IP에 바인딩되지 않는 것 같아서 IPsec 코어를 업데이트해야 합니다.

지금까지 제가 생각해낸 내용은 다음과 같습니다. - IPSec 확인 결과 내 커널이 IPsec을 지원하지 않는 것으로 나타났습니다.

-VPS 공급자에게 호스트의 openvz 환경에서 IPSec를 활성화하도록 했지만 그들은 커널을 다시 빌드해야 한다고 말하고 Universal 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이 "작동"하는 것 같습니다. 커널 지원이 실제로 없는지, 아니면 잘못된 결함인지 잘 모르겠습니다. Pluto 결함을 수정하는 방법도 모릅니다.

다양한 가이드를 따랐지만 이 문제를 극복할 수 없는 것 같습니다.

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

Docker 컨테이너에서 openswan/ipsec/pluto를 작동시키려고 시도하는 동안 비슷한 문제가 발생했습니다. 나와 동일한 기본 구성을 사용하여 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는 발견한 네트워크 장치와 다른 장치가 부적절한 이유(예: 공개되지 않음)에 대한 자세한 정보를 제공합니다.

관련 정보