我已经设置了一个主机到主机的设置,其中我只希望公开服务器 IP,以便连接到 VPN 的任何人都可以与该服务器上的服务通信。
connections {
rw {
pools = rw_pool
send_cert = always
unique = no
fragmentation=yes
local {
auth = pubkey
certs = [CERT].pem
id = [ID]
}
remote {
auth = eap-mschapv2
eap_id = %any
}
children {
rw {
local_ts = [WAN IP OF SERVER]
esp_proposals = chacha20poly1305-sha512, aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1
}
}
send_certreq = no
}
}
连接正常,请求确实来自 VPN 选定的 IP 范围,但是,由于我的目标是外部 IP,在 IP 退出后,这是否仍会通过不安全的通道路由流量?
客户端配置:
connections {
home {
version=2
remote_addrs = [SERVER ADDR]
vips = 0.0.0.0
local {
auth = eap-mschapv2
eap_id = [ID]
}
remote {
auth = pubkey
id = [SERVER ID]
}
children {
home {
remote_ts = [WAN IP OF SERVER]
local_ts = dynamic
#remote_ts = 10.10.10.0/24
start_action = start
}
}
}
}
第二个较小的问题是,如何进行主机到站点的设置,其中我的服务器是其网络中的单个实体,但另一端是 Fortigate 路由器,其背后有一个更大的网络,这种设置可以工作吗?
提前感谢您的努力!
编辑:通过使用 ip 创建 tun0 接口并将其用作 local_ts,解决了 Ip 问题
不是,这是 IPsec 与其他 VPN 实现之间的主要区别。IPsec 最初是专门设计为主机到主机的安全通道,之后再在其上添加 VPN(现在作为 IKEv2 一部分的 VPN 支持曾经是 Cisco 的专有扩展)。
因此,像 strongSwan 这样的传统 IPsec 实现是基于策略的,而不是基于路由的1 - 这意味着没有单独的隧道接口可供数据包通过路由以实现安全;相反,它们在离开常规网络接口时被拦截和转换。
(实际上,甚至还有一种子 SA 模式 -
transport
模式 - 专门用于保护主机到主机的流量到 IPsec 端点本身。它很少使用,因为隧道模式无论如何都可以执行相同的操作,尽管传输模式具有较低的 MTU 开销。)因此,即使您联系 VPN 服务器的外部地址(该地址在基于路由的系统中通常具有“绕过”路由),它仍然受 IPsec 转换层的约束并且会被加密(只要它包含在子
local/remote_ts
SA 的协商流量选择器中)。建立 SA 后,运行
swanctl -l
以查看它最终影响哪些流量,或者如果您愿意,可以使用ip xfrm
直接查看在数据包离开接口之前应用的 Linux“转换”策略。如果有疑问,请使用 iptables
policy
match 或 nftablesmeta ipsec exists
来防止不安全的数据包离开或进入您的服务器。1(strongSwan 基于策略的架构确实使 VPN“虚拟 IP”的使用相当混乱,以至于他们让步并增加了一些基于路由的模型的支持。)
扩展 Fortigate 端(其等同于
local_ts
)的流量选择器以及相应的服务器的流量选择器remote_ts
以覆盖附加子网应该就足够了。