最近,我试图找到一种方法,在我的天蓝色虚拟机和 FreeBSDVPS我在另一个提供商那里运行。 我没有找到任何东西,但我找到了一个文章了解如何使用 哪个加速器可以下载海外游戏 在 pfSense 和 Azure 之间创建站点到站点 VPN。 请注意,Azure 不支持这种站点到站点 VPN。 目前,它们只支持有限的 Cisco ASA 和 Juniper 设备。
pfSense基本上是经过大量修改的FreeBSD因此,我决定将一个新的 pfSense 虚拟机作为带公共 IP 的 VPS 来运行,我创建了一个站点到站点的 pfSense<->Azure and then analyzed (reverse engineered) the configuration files. The result is a fully working site-to-site connection between Azure and FreeBSD 10.0 box.
目录
哪个加速器可以下载海外游戏
您将需要
我的实施情况是这样的。 我有一个带有两个网卡的 FreeBSD 盒子(一个外部网卡面向互联网,使用公共 IP,另一个内部网卡使用 VPS 提供商分配的子网。 我无法更改这个子网)。 确保 BSD 盒子上有公共 IP。 如果 BSD 盒子上没有公共 IP,IPsec 将无法工作。 我不会隐藏外部 IP。 这些都是测试箱,当你读到这篇文章时,它们早已不复存在了。
哪个加速器可以下载海外游戏
为了让 FreeBSD 运行一个IPsec 隧道因此,您必须使用定制的内核。 在我的例子中,我配置的 FreeBSD 盒子使用的是 10.0-RELEASE-p12。 您可以使用
uname -a
输出结果应该是这样的
FreeBSD freebsd2 10.0-RELEASE-p12 FreeBSD 10.0-RELEASE-p12 #0: Tue Nov 4 05:07:17 UTC 2014[电子邮件保护]:/usr/obj/usr/src/sys/GENERIC amd64
这意味着我正在 64 位平台上运行带有 GENERIC 内核的 10.0-RELEASE-p12。
VPS 上没有安装源文件(构建自定义内核所需的文件),因此我必须执行以下操作:
pkg install subversion svn co svn: /usr/src freebsd-update fetch svn update /usr/src
然后,我复制了一份 GENERIC 内核文件:
cd /usr/src/sys/amd64/conf cp GENERIC MYKERNEL-20141227
我还在最后加上了这几行字
选项 IPSEC 设备加密选项 IPSEC_DEBUG
然后,我编译了内核并重新启动(大约需要 10-20 分钟)。
cd /usr/src make buildkernel KERNCONF=MYKERNEL-20141227 make installkernel KERNCONF=MYKERNEL-20141227
如果您的内核编译因某种原因崩溃,并出现类似这样的错误。
m.o pci_bus.o qpi.o busdma_machdep.o dump_machdep.o intr_machdep.o io_apic.o legacy.o local_apic.o mca.o msi.o nexus.o tsc.o hvm.o xen_intr.o config.o env.o hints.o vnode_if.o hack.so vers.o
*** 信号 9
停下。
make[2]: 停靠于 /usr/obj/usr/src/sys/MYKERNEL-20141224
*** 错误代码 1
这意味着你弄乱了编译器/make 工具,所以要这么做:
make kernel-toolchain make buildkernel KERNCONF=MYKERNEL-20141227 make installkernel KERNCONF=MYKERNEL-20141224
服务器启动后,安装 IPsec 工具。
pkg install ipsec-tools
检查内核是否支持 ipsec。
sysctl -a | grep ipsec
你会看到一堆 ipsec 属性。
哪个加速器可以下载海外游戏
登录 Azure 门户并创建新的虚拟网络。
给网络起个名字吧,我的情况是天蓝色<->FreeBSD. 此外,还要选择地点,就我而言美国东部.
输入 DNS 服务器的 IP。 如果需要,可以指定多个 DNS 服务器。 如果不指定 DNS 服务器,Azure 将使用自己的 DNS 服务器。 如果指定的服务器位于 FreeBSD 盒子后面的网络上,请使用内部 IP,而不是外部 IP。 单击配置站点到站点 VPN.
在下一界面,输入 FreeBSD 内部网络的名称(如 FreeBSD-local、FreeBSD-internal)和 BSD 盒子的外部 IP。 对于地址空间,请以 CIDR 格式输入 FreeBSD 内部网络的子网。 在我的例子中,我的 VPS 为我提供了10.99.0.0/16子网。
在下一个屏幕中,Azure 会自动为你的 Azure 虚拟机分配一个不同子网的网络,在本例中是10.100.0.0/16. 可随意将其更改为 192.168.1.0/24 或任何您希望为 Azure 虚拟机分配的 IP。
重要事项
双方的内部网络必须位于不同的子网中。 不能在相同子网之间建立隧道。
我接受默认设置。/16是一个庞大的子网,您可能需要一个/24子网,但这只是一个例子。 最后,点击添加网关子网. 这是 Azure 所需要的。
创建网络需要 3-5 秒钟。
点击刚刚创建的网络,然后点击创建网关.
重要事项
点击进入静态路由.
现在等待 10-12 分钟。 在测试我的解决方案时,我至少创建了 10 个网关。 无论您选择的网络在哪里(美国东部、欧洲西部等),都需要 10-12 分钟。
网关创建完成后,点击网络就会看到这个。 这是 Azure 网关的外部 IP。
哪个加速器可以下载海外游戏
在等待期间,继续运行一个新的虚拟机进行测试。 使用最低默认值。
选择操作系统,我的情况是 Windows 2008 R2。
我使用最低配置进行测试。 虽然速度慢了点,但也能完成测试工作。
此时,您必须指定网络。
完成后,连接虚拟机并获取内部 IP。
哪个加速器可以下载海外游戏
选择天蓝色<->FreeBSD网络,然后点击管理钥匙.
这是您的共享密钥。 您将需要它,因此请将其复制到剪贴板上。
哪个加速器可以下载海外游戏
在测试解决方案时,我可以建立站点到站点的 VPN,但无法连接到双方的任何内部服务器。 我尝试了各种数据包捕获方法,分析报头和 ARP 数据包,但都无法找出问题所在。 三四个小时后,我发现是我在spd.conf. 这是一个小错误。 所以......这就是我们现在所掌握的情况。 请花点时间,确保您拥有正确的 IP 和子网。
哪个加速器可以下载海外游戏
好了,你已经在自定义内核中启用了 IPsec,并安装了 ipsec-tools。 是时候进行连接了。 但首先我们要创建一些文件。 转到
cd /usr/local/etc/racoon
并创建包含远程(Azure)网关 IP 和共享密钥的 psk 文件。 我的情况与此类似。
cat psk.txt
104.41.153.24 egfy566O98uI9WNog65dcLiVilqlZGkQicK
接下来,创建策略。 这是一个新文件spd.conf在同一目录中 (/usr/local/etc/racoon).
flush; spdflush; spdadd -4 10.99.0.10/32 10.99.0.0/16 any -P out none; spdadd -4 10.99.0.0/16 10.99.0.10/32 any -P in none; spdadd -4 10.99.0.0/16 10.100.0.0/16 any -P out ipsec esp/tunnel/107.191.48.197-104.41.153.24/unique; spdadd -4 10.100.0.0/16 10.99.0.0/16 any -P in ipsec esp/tunnel/104.41.153.24-107.191.48.197/unique;
看上面。 确保所有 IP 和子网匹配。 因为一个错别字,我在这上面费了好大劲。
用以下方式设置政策
setkey -c -f /usr/local/etc/racoon/spd.conf
第三个文件是racoon.conf在同一目录下。 同样,查找 IP 和子网(例如isakmp根据倾听是 FreeBSD 外部接口的 IP、同行标识符是 Azure 网关,等等......)。
path pre_shared_key "/usr/local/etc/racoon/psk.txt"; listen { isakmp 107.191.48.197 [500]; } remote 104.41.153.24 { ph1id 1; exchange_mode main; my_identifier address 107.191.48.197; peers_identifier address 104.41.153.24; ike_frag on; generate_policy = off; initial_contact = on; nat_traversal = off; dpd_delay = 10; dpd_maxfail = 5; support_proxy on; proposal_check claim; proposal { authentication_method pre_shared_key; encryption_algorithm aes 256; hash_algorithm sha1; dh_group 2; lifetime time 28800 secs; } sainfo subnet 10. } Sainfo subnet 10.99.0.0/16 any subnet 10.100.0.0/16 any { remoteid 1; encryption_algorithm aes 256, aes 192, aes 128; authentication_algorithm hmac_sha256; lifetime time 3600 secs; compression_algorithm deflate; }
注意:pfSense 使用 NAT-Traversal,但你需要在内核中编译它 (选项 IPSEC_NAT_T). 我对此不太熟悉,但并不需要。 您可以阅读有关 NAT-T这里.
这样,三个必要文件都有了,最后要做的就是更改权限。
cd /usr/local/etc/racoon chmod 0600 *
仅限psk.txt需要这些权限,否则无法运行,但如果其他文件也有这些权限也无妨。
最后,确保启用了 NAT,这样数据包就可以在 BSD 盒子的外部接口和内部接口之间穿行。
sysctl net.inet.ip.forwarding=1
至此,一切准备就绪。 让我们开始吧。"-F"指在前台运行、"-v"是指更啰嗦和"-ddd"意味着大量的调试信息。
racoon -F -v -ddd
如果一切顺利,你会看到这样的输出结果。
2014-12-28 01:08:55: DEBUG: pfkey UPDATE succeeded: ESP/Tunnel 107.191.48.197[500]->104.41.153.24[500] spi=70552724(0x4348c94)
2014-12-28 01:08:55: INFO: IPsec-SA established: ESP/Tunnel 107.191.48.197[500]->104.41.153.24[500] spi=70552724(0x4348c94)
2014-12-28 01:08:55: DEBUG: ===
2014-12-28 01:08:55: DEBUG: pk_recv: retry[0] recv()
2014-12-28 01:08:55: DEBUG:收到 pfkey ADD 消息
2014-12-28 01:08:55: DEBUG2:
02030003 14000000 D37DD3A1 06070000 02000100 25F4B508 0400050C 00000000
02001300 02000000 00000000 01400000 03000500 ff200000 100201f4 6bbf30c5
00000000 03000600 FF200000 100201F4 68299918 00000000 00000000
04000300 00000000 00000000 00000000 100e0000 00000000 00000000 00000000
04000400 00000000 00000000 00000000 400b0000 00000000 00000000 00000000
2014-12-28 01:08:55: INFO: IPsec-SA established: ESP/Tunnel 107.191.48.197[500]->104.41.153.24[500] spi=636794120(0x25f4b508)
2014-12-28 01:08:55: DEBUG: ===
如果切换到 Azure 侧,则什么也看不到。 隧道显示大约需要 3-5 分钟。 看起来是这样的
您不必等待 Azure 向您显示隧道已经建立。 只要能看到类似这样的信息,就没问题。
2014-12-28 01:08:55: INFO: IPsec-SA established: ESP/Tunnel 107.191.48.197[500]->104.41.153.24[500] spi=636794120(0x25f4b508)
此时,您可以访问 Azure 虚拟机并 ping FreeBSD 的内部 IP。 你应该会看到响应。 但是,如果尝试从 FreeBSD ping Azure 虚拟机,则不会有任何响应。 这并不是因为 Azure Windows 虚拟机默认启用了防火墙。 这是因为我们使用了静态路由。 请记住,在创建 Azure 网关时,我们选择了静态路由。 因此,添加一个静态路由。
route add 10.100.0.0.0/16 10.99.0.0.10
对于 FreeBSD 来说,这意味着如果您想访问任何主机上的10.100.0.0/16网络 (Azure),使用10.99.0.10(内部 FreeBSD 网卡)作为网关。 Azure 端不需要路由。 Azure 网关会处理这些问题。
现在,你应该无法 ping Azure 虚拟机 (10.100.0.4)又来了。 怎么了? 那是因为 Azure 虚拟机启用了 Windows 防火墙。 但 RDP 启用了,所以要这么做:
telnet 10.100.0.4 3389
你应该看看这个。
telnet 10.100.0.4 3389
尝试 10.100.0.4...
连接到 10.100.0.4。
Escape 字符为 '^]'。
如果你做到了这一点,恭喜你。 如果没有,请仔细检查一切。 我假设你的 BSD 盒子上没有防火墙。 如果有,请继续阅读。
哪个加速器可以下载海外游戏
可以找到防火墙配置这里为 pf 和 IPFW。
从任意端口将 quick proto esp 传递至任意端口 从任意端口将 quick proto ah 传递至任意端口 从任意端口将 quick proto ipencap 传递至任意端口 从任意端口将 quick proto udp 传递至任意端口 = 500 从任意端口将 quick on gif0 传递至任意端口 从任意端口将 quick proto esp 传递至任意端口 从任意端口将 quick proto ah 传递至任意端口 从任意端口将 quick proto ipencap 传递至任意端口 从任意端口将 quick proto udp 传递至任意端口 = 500 从任意端口将 quick on gif0 传递至任意端口
移除gif0行,我们不使用gif0. 无需啊结束ipencap线路也是如此。
哪个加速器可以下载海外游戏
如果一切正常,重启后一切都会消失。 您必须编辑/etc/rc.conf并添加这几行。
# IPsec gateway_enable="YES" ipsec_enable="YES" ipsec_program="/usr/local/sbin/setkey" ipsec_file="/usr/local/etc/racoon/spd.conf" racoon_enable="yes" racoon_flags="-l /var/log/racoon.log" static_routes="azurenet" route_azurenet="-net 10.100.0.0/16 10.99.0.10";
不言自明。 我们使用了上述相同的命令。