允许 SSH 绕过 OSX mavericks、openvpn、pf 上的 VPN

允许 SSH 绕过 OSX mavericks、openvpn、pf 上的 VPN

我的家用电脑通过 OpenVPN 连接互联网。但是,我希望能够通过 ssh 从外部连接到我的家用电脑。ssh 已设置并正常工作,但当我连接到 vpn 时,只能从我的家庭网络内部访问 ssh。

我认为问题出在路由器将传入的 ssh 连接转发到我的 mac,但随后我的 mac 通过 vpn 回复,因此外部连接超时。我已经为其他几个事情设置了 pf,但我不知道如何使用 pf 让 ssh 回复绕过 vpn。我遇到过使用 ip 表、路由表和规则的其他解决方案,但我不知道如何在 mavericks 上进行设置。

我已经搜索这个问题一段时间了,但还没有找到可行的解决方案。如能得到任何帮助我将不胜感激!

更新:我将添加(部分)我当前的 pf.conf 以便更清晰,并添加规则,感谢 MariusMatutiae

#
# Macros
#
vpn_if = "tun0"
lan_if = "en0"
lan_gw = "x.x.x.x"
vpn_gw = "y.y.y.y"

#
# Ruleset
#
pass out on $lan_if route-to ($vpn_if $vpn_gw) from $vpn_if
pass out on $vpn_if route-to ($lan_if $lan_gw) from $lan_if

更新 #2:下面是我尝试过的一些规则(但没有成功)

# Nat to make replies seem to come from my external ip address
nat on $lan_if -> $ext_ip

# Redirect incoming requests on the lan interface back to the lan interface
rdr pass on $lan_if from ! $lan to any -> ($lan_if)

# Make pf reply to lan interface 
pass in quick on $lan_if reply-to ($lan_if $lan_gw)

我真的希望有人能帮助我!

答案1

您的诊断是正确的:初始联系是通过您的家庭路由器,通过 OpenVPN 进行回复,您的计算机出于明显的安全原因将其丢弃。

您所要求的就是所谓的Policy-based-路由Source-based-。基本上,这意味着有两个(或更多)不同的路由表,并根据一些预定义的规则在它们之间切换。它存在于 Linux 中,并且由于 PF 而存在于 FreeBSD/OpenBSD 中,参见此维基百科文章. 但是由于 PF 在 Mac 上存在(请参阅此处了解如何设置的说明), 我以为我可以告诉你如何在 PF 中做到这一点,尽管严格来说,我只在 OpenBSD 中做到这一点(当然还有 Linux)。

基本上,上面引用的参考资料告诉您,在放置 PF 规则时有两种选择。无论您选择哪种,请将这些规则添加到文件中:

 ext_if1 = "ether"
 ext_if2 = "tun"
 ext_gw1 = "192.168.1.100"
 ext_gw2 = "10.0.0.3"
 pass out on $ext_if1 from $ext_if2 route-to ($ext_if2 $ext_gw2)
 pass out on $ext_if2 from $ext_if1 route-to ($ext_if1 $ext_gw1) 

这里的“*ext_if1”是你通过路由器建立的以太网连接,192.168.1.100它的 IP 地址,而外部接口2是你的虚拟接口(tun 或 tap,无论什么),带有 IP 地址10.0.0.3。您应该根据需要替换适当的地址。

顺便说一句,这是直接从 PF 用户手册中摘录的,这里,除非我简化以适应您的(更简单的)要求。

相关内容