我正在尝试做的是在我的networking和我朋友的networking之间创build一个站点到站点的IPsec VPN。 我们在每台路由器上都有一台路由器和两台计算机,所有计算机都运行Linux。 所以我猜想拓扑看起来像这样
[myPC1 + myPC2] — myRouter ——互联网—– hisRouter — [hisPC1 + hisPC2]
两台路由器都很便宜,所以它们没有像OpenWRT那样的东西。
所以configuration – 我想这应该在Linux的双方完成。
到目前为止,我们已经尝试过使用RSA密钥和PSK的openSwan,但在命令之后
ipsec auto --up net-to-net
我们要么得到错误“没有连接命名为networking到networking”或错误“我们无法确定自己与这个连接的任何一端”。
我想我们正在configurationipsec.conf文件错误。 有人能解释一下,我们应该如何正确configuration它来实现这种拓扑结构?
这里有一些事实可能会帮助你更好地理解我的情况。
这些都来自我们testing的PSK例子。
eth0 Link encap:Ethernet HWaddr 00:0C:29:1B:F5:1C inet addr:192.168.1.78 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe1b:f51c/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:829 errors:0 dropped:0 overruns:0 frame:0 TX packets:704 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1213737 (1.1 MiB) TX bytes:57876 (56.5 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:53 errors:0 dropped:0 overruns:0 frame:0 TX packets:53 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:3664 (3.5 KiB) TX bytes:3664 (3.5 KiB)
Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:4 errors:0 dropped:0 overruns:0 frame:0 TX packets:4 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:240 (240.0 b) TX bytes:240 (240.0 b) p2p1 Link encap:Ethernet HWaddr 08:00:27:2A:F1:F5 inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe2a:f1f5/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:21104 errors:0 dropped:0 overruns:0 frame:0 TX packets:12458 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:16079321 (15.3 MiB) TX bytes:1012204 (988.4 KiB)
version 2.0 config setup protostack=netkey nat_traversal=yes #virtual_private= oe=off conn net-to-net authby=secret # Key exchange method left=212.251.112.115 # Public Internet IP address of the leftsubnet=10.0.2.0/24 # Subnet protected by the LEFT VPN device leftnexthop=%defaultroute # correct in many situations right=79.103.7.114 # Public Internet IP address of rightsubnet=192.168.1.0/24 # Subnet protected by the RIGHT VPN device rightnexthop=%defaultroute # correct in many situations auto=start # authorizes and starts this connection
212.251.112.115 79.103.7.114 : PSK "123"
我们得到这些IPcurlifconfig.meconfiguration完成后,我们运行:
service ipsec restart ipsec verify
并且我们在send_redirects中得到了同样的失败消息,它拒绝改变为0
Checking your system to see if IPsec got installed and started correctly: Version check and ipsec on-path [OK] Linux Openswan U2.6.37/K3.1.0-7.fc16.x86_64 (netkey) Checking for IPsec support in kernel [OK] SAref kernel support [N/A] NETKEY: Testing XFRM related proc values [FAILED] Please disable /proc/sys/net/ipv4/conf/*/send_redirects or NETKEY will cause the sending of bogus ICMP redirects! [FAILED] Please disable /proc/sys/net/ipv4/conf/*/accept_redirects or NETKEY will accept bogus ICMP redirects! [OK] Checking that pluto is running [OK] Pluto listening for IKE on udp 500 [OK] Pluto listening for NAT-T on udp 4500 [OK] Checking for 'ip' command [OK] Checking /bin/sh is not /bin/dash [OK] Checking for 'iptables' command [OK] Opportunistic Encryption Support [DISABLED]
然后我们继续
ipsec auto --up net-to-net
我们都得到了
022 "net-to-net": We cannot identify ourselves with either end of this connection.
我不知道是否有帮助,也许你已经注意到了什么是错误的,但是这里是最后一件事,ipsec的状态:
ipsec auto --status 000 using kernel interface: netkey 000 interface lo/lo ::1 000 interface lo/lo 127.0.0.1 000 interface lo/lo 127.0.0.1 000 interface eth0/eth0 192.168.1.78 000 interface eth0/eth0 192.168.1.78 000 %myid = (none) 000 debug none 000 000 virtual_private (%priv): 000 - allowed 0 subnets: 000 - disallowed 0 subnets: 000 WARNING: Either virtual_private= is not specified, or there is a syntax 000 error in that line. 'left/rightsubnet=vhost:%priv' will not work! 000 WARNING: Disallowed subnets in virtual_private= is empty. If you have 000 private address space in internal use, it should be excluded! 000 000 algorithm ESP encrypt: id=2, name=ESP_DES, ivlen=8, keysizemin=64, keysizemax=64 000 algorithm ESP encrypt: id=3, name=ESP_3DES, ivlen=8, keysizemin=192, keysizemax=192 000 algorithm ESP encrypt: id=6, name=ESP_CAST, ivlen=8, keysizemin=40, keysizemax=128 000 algorithm ESP encrypt: id=7, name=ESP_BLOWFISH, ivlen=8, keysizemin=40, keysizemax=448 000 algorithm ESP encrypt: id=11, name=ESP_NULL, ivlen=0, keysizemin=0, keysizemax=0 000 algorithm ESP encrypt: id=12, name=ESP_AES, ivlen=8, keysizemin=128, keysizemax=256 000 algorithm ESP encrypt: id=13, name=ESP_AES_CTR, ivlen=8, keysizemin=160, keysizemax=288 000 algorithm ESP encrypt: id=14, name=ESP_AES_CCM_A, ivlen=8, keysizemin=128, keysizemax=256 000 algorithm ESP encrypt: id=15, name=ESP_AES_CCM_B, ivlen=8, keysizemin=128, keysizemax=256 000 algorithm ESP encrypt: id=16, name=ESP_AES_CCM_C, ivlen=8, keysizemin=128, keysizemax=256 000 algorithm ESP encrypt: id=18, name=ESP_AES_GCM_A, ivlen=8, keysizemin=128, keysizemax=256 000 algorithm ESP encrypt: id=19, name=ESP_AES_GCM_B, ivlen=8, keysizemin=128, keysizemax=256 000 algorithm ESP encrypt: id=20, name=ESP_AES_GCM_C, ivlen=8, keysizemin=128, keysizemax=256 000 algorithm ESP encrypt: id=22, name=ESP_CAMELLIA, ivlen=8, keysizemin=128, keysizemax=256 000 algorithm ESP encrypt: id=252, name=ESP_SERPENT, ivlen=8, keysizemin=128, keysizemax=256 000 algorithm ESP encrypt: id=253, name=ESP_TWOFISH, ivlen=8, keysizemin=128, keysizemax=256 000 algorithm ESP auth attr: id=1, name=AUTH_ALGORITHM_HMAC_MD5, keysizemin=128, keysizemax=128 000 algorithm ESP auth attr: id=2, name=AUTH_ALGORITHM_HMAC_SHA1, keysizemin=160, keysizemax=160 000 algorithm ESP auth attr: id=5, name=AUTH_ALGORITHM_HMAC_SHA2_256, keysizemin=256, keysizemax=256 000 algorithm ESP auth attr: id=6, name=AUTH_ALGORITHM_HMAC_SHA2_384, keysizemin=384, keysizemax=384 000 algorithm ESP auth attr: id=7, name=AUTH_ALGORITHM_HMAC_SHA2_512, keysizemin=512, keysizemax=512 000 algorithm ESP auth attr: id=8, name=AUTH_ALGORITHM_HMAC_RIPEMD, keysizemin=160, keysizemax=160 000 algorithm ESP auth attr: id=9, name=AUTH_ALGORITHM_AES_CBC, keysizemin=128, keysizemax=128 000 algorithm ESP auth attr: id=251, name=(null), keysizemin=0, keysizemax=0 000 000 algorithm IKE encrypt: id=0, name=(null), blocksize=16, keydeflen=131 000 algorithm IKE encrypt: id=5, name=OAKLEY_3DES_CBC, blocksize=8, keydeflen=192 000 algorithm IKE encrypt: id=7, name=OAKLEY_AES_CBC, blocksize=16, keydeflen=128 000 algorithm IKE hash: id=1, name=OAKLEY_MD5, hashsize=16 000 algorithm IKE hash: id=2, name=OAKLEY_SHA1, hashsize=20 000 algorithm IKE dh group: id=2, name=OAKLEY_GROUP_MODP1024, bits=1024 000 algorithm IKE dh group: id=5, name=OAKLEY_GROUP_MODP1536, bits=1536 000 algorithm IKE dh group: id=14, name=OAKLEY_GROUP_MODP2048, bits=2048 000 algorithm IKE dh group: id=15, name=OAKLEY_GROUP_MODP3072, bits=3072 000 algorithm IKE dh group: id=16, name=OAKLEY_GROUP_MODP4096, bits=4096 000 algorithm IKE dh group: id=17, name=OAKLEY_GROUP_MODP6144, bits=6144 000 algorithm IKE dh group: id=18, name=OAKLEY_GROUP_MODP8192, bits=8192 000 algorithm IKE dh group: id=22, name=OAKLEY_GROUP_DH22, bits=1024 000 algorithm IKE dh group: id=23, name=OAKLEY_GROUP_DH23, bits=2048 000 algorithm IKE dh group: id=24, name=OAKLEY_GROUP_DH24, bits=2048 000 000 stats db_ops: {curr_cnt, total_cnt, maxsz} :context={0,0,0} trans={0,0,0} attrs={0,0,0} 000 000 "net-to-net": 10.0.2.0/24===212.251.112.115<212.251.112.115>[+S=C]---192.168.1.254...192.168.1.254---79.103.7.114<79.103.7.114>[+S=C]===192.168.1.0/24; unrouted; eroute owner: #0 000 "net-to-net": myip=unset; hisip=unset; 000 "net-to-net": ike_life: 3600s; ipsec_life: 28800s; rekey_margin: 540s; rekey_fuzz: 100%; keyingtries: 0 000 "net-to-net": policy: PSK+ENCRYPT+TUNNEL+PFS+IKEv2ALLOW+SAREFTRACK+lKOD+rKOD; prio: 24,24; interface: ; 000 "net-to-net": newest ISAKMP SA: #0; newest IPsec SA: #0;
还有一个问题是,NETKEY [失败]问题如何解决?
我的话,你有你的工作切断。 好; 这里有一个大纲的基础,因为目前你的基础知识是错误的,细节并不重要。
在别的之前,事实上你没有为每个你的互联网连接设置静态的公共地址是一个问题。 IPSec不能轻易地在这种configuration中支持隧道[1],所以每当你的地址发生变化时,你都要编辑你的ipsec.conf。 好?
现在,当我问你是否每个OpenSWAN端点都有一个公共IP地址,并且你自信地说“是”时,结果如我所猜测的那样 – 你错了。 你的ifconfig输出显示我的一端有地址192.168.1.78,另一端有地址10.0.2.15。 您还告诉我,一端(当前) 在公共IP地址212.251.112.115之后,另一端在79.103.7.114之后。 你不说哪个是哪个,所以我假定192.168.1.78落后于212.251.112.115,而10.0.2.15落后于79.103.7.114。 如果这是错误的,只是扭转对应。 我还会把前一对和后一对称为对。 哪一个是没有什么区别的,但是这会帮助我们保持思路的直截了当,这是一个非常好的主意。
您需要在两端设置公共路由器将UDP / 500和协议50和51(仅为完整性)转发到每个公共地址内的OpenSWAN端点。 如果你不能pipe理两个协议穿通,那么在NAT穿越上调查doco,并转发UDP / 4500。
首先,要求每一端都在configuration中find自己的IP地址,这样每个端口在启动的时候就可以知道是左边还是右边。 所以左边需要有一个ipsec.conf包含
conn net-to-net authby=secret left=192.168.1.78 leftsubnet=192.168.1.0/24 leftnexthop=%defaultroute right=79.103.7.114 rightsubnet=10.0.2.0/24
和一个ipsec.secrets说
192.168.1.78 79.103.7.114: PSK "123"
而正确的必须有一个ipsec.conf包含
conn net-to-net authby=secret left=212.251.112.115 leftsubnet=192.168.1.0/24 right=10.0.2.15 rightsubnet=10.0.2.0/24 rightnexthop=%defaultroute
和一个ipsec.secrets说
10.0.2.15 212.251.112.115: PSK "123"
每一端真的需要知道它是谁,而它可以假装它并不在乎远端是否在NAT后面。 你有看到?
此外,您需要configuration每端的所有客户端,以便通过本地OpenSWAN端点获得到远程RFC1918networking的路由。 您需要检查每个端点上的/proc/sys/net/ipv4/ip_forward设置为1。 至less就现在而言,closures两个端点上的任何防火墙是一个非常好的主意。 您可能还需要激活一些configurationvariables,告诉每个端点不要在意远端端点认为它与本地端点认为它具有不同的IP地址; 从记忆中,这些是leftid=和rightid= ,但是你将不得不为自己工作。
所以这就是基础。 如果你的基本拓扑和概念正确,剩下的只是debugging细节。 祝你好运。
[1]这不完全正确。 SWAN实现支持机会性IPSecencryption,但是这要求您控制两端的反向DNS,而且我猜测你不这样做。 再次阅读手册页,如果你想知道更多关于这个。