Vpn

Pluto 在 ipsec VPN 上找不到介面

  • March 15, 2016

我正在嘗試設置 ipsec,但是 pluto 似乎沒有綁定到公共 IP,並且 IPsec 核心需要更新。

到目前為止,這是我想出的:-IPSec 驗證狀態我的核心不支持 IPsec

-我已經讓 VPS 提供商在主機上的 openvz 環境中啟用 IPSec,但是他們說我必須重建核心並為我提供了指向通用 linux 核心的 linux 核心存檔站點的連結。

  • 我已經嘗試建構核心並安裝它,但我似乎無法正確安裝它。我做的最後一步是’mkinitramfs -o initrd.img-3.16.3 3.16.3'

-tutorials 聲明使用 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 未找到公共介面”問題,但找不到太多幫助。不確定這是否是真正的問題,因為我相信我正確設置了介面。

ipsec verify 也失敗:

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

這個問題的最終答案是,openVZ VPS 提供商必須有一個支持 ipsec 的核心,並且必須在主機上啟用 ipsec 模組。我們的一些供應商不會這樣做,因為這對主機來說是一個很大的變化。相反,我們發現我們所有的供應商都支持 openvpn 協議,並且我們在我們的供應商的所有 openvz VPS 上啟用了“tun”。

我在嘗試讓 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 會提供更多資訊,說明它找到了哪些網路設備以及為什麼其他設備不適合(即不公開)。

引用自:https://unix.stackexchange.com/questions/156139