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で「トン」を有効にするためにプロバイダと協力しました。

答え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は、見つかったネットワークデバイスと他のデバイスが不適切な理由(たとえば、公開されていない)に関する詳細な情報を提供します。

関連情報