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