我使用 OpenSwan 和 xl2tpd 设置了 L2TP/IPsec VPN,并使用了“nodefaultroute”ppp 选项。服务器的虚拟 IP 地址设置为 10.10.31.1,并分配 10.10.31.2-254 范围内的地址。这在 10.10.31.1 <-> 10.10.31.2 等之间设置了 PPP 链接,并且运行正常 - VPN 连接的主机可以与服务器通信。
我如何设置 ppp 链接,使服务器端看起来像整个范围 10.10.0.0,而不仅仅是该 IP 地址?我希望连接客户端随后将通过 VPN 接口路由该子网的任何请求,服务器可以在那里捕获它们并充当网关。从另一个方向看,“proxyarp”选项将允许 VPN 服务器捕获返回 VPN 客户端的流量。
一个明显的解决方案是使用 VPN 服务器作为默认路由。我宁愿不这样做,这样只有特定于该子网的流量才会通过 VPN。这可能吗?
答案1
正如我所料,问题在于我有点笨。如果有人发现这个问题并且有同样的疑问,那么以下是您应该知道的关键事项:
nodefaultroute 不会进入您的 VPN 服务器配置。这是 PPP 客户端的功能。PPP 客户端负责决定是否创建默认路由。这是 iOS 上的“发送所有流量”复选框。
您的 PPP 客户端将始终创建到远程网关的路由,以及到远程子网的路由。假设你的 VPN 服务器上启用了 IP 转发(/proc/sys/net/ipv4/ip_forward = 1 加上 Linux 上适当的 iptables 规则),你的客户端将能够发送流量到远程子网上的主机。
您必须在 ppp options.xl2tpd 文件中为 VPN 服务器 LAN 上的主机指定 proxyarp,以便能够将流量发送回客户端。这将在 arp 表中创建一个条目,并在内核中启用 proxy_arp 选项。这允许 VPN 服务器使用其自己的以太网接口代表 VPN 客户端接受数据包。如果您不想这样做或需要跨路由器,将 VPN 客户端置于 NAT 后面似乎是一种流行的解决方案,尽管我自己没有测试过。
如果客户端要使用 VPN 作为默认路由,请使用 ms-dns ppp 选项为客户端提供名称服务器。否则 iPad 会抱怨它未连接到互联网。