目前我的设置是使用 XAMPP 和 Windows 网络连接提供的简单 VPN 服务器。
如果我删除Incoming Connections
,启动 apache,然后像这样重新创建 VPN 服务器:
它运行良好(VPN 和 apache)。
我已经知道我可以更改 Apache 以在不同的端口上运行,但我不想这样做。有什么方法可以阻止系统使用端口 443?
因此,更改 VPN 服务器的端口也许对我来说也不是什么好事。
我想同时运行 apache 和 VPN,有什么建议吗?
答案1
问题在于 Windows 7 会尝试使用其支持的所有协议接受传入的 VPN 连接,其中包括SSTP(安全套接字隧道协议)。SSTP 基本上是通过 SSL 建立的 PPP 隧道,默认情况下它使用与通常的 HTTPS 连接相同的端口 443。这样使用端口 443 允许 SSTP 通过许多允许连接到 HTTPS 服务器的 HTTP 代理。不幸的是,这也意味着它会与在与 SSTP VPN 服务器相同的计算机上运行 HTTPS 服务器发生冲突 — — 除非 HTTPS 服务器是 Microsoft IIS,它使用http.sys
与 SSTP 服务器相同的内核驱动程序来处理 HTTP 和 HTTPS 请求。
请注意,传入的 SSTP 连接很可能会失败,因为您的计算机可能没有适当的服务器证书来接受它们。您可能会在系统事件日志中看到 RasSstp/18 警告事件,告知这些问题。但是,这并不能阻止系统占用端口 443,即使 SSTP 客户端与该端口的连接实际上会失败。
有一些有用的路由和远程访问博客中有关 SSTP 的文章。但是,我找不到一种方法来禁用仅针对 VPN 服务器的 SSTP 使用。可以在设备管理器中禁用“WAN 微型端口 (SSTP)”设备(启用“显示隐藏设备”选项后),但是,这也会影响来自同一台机器的传出 VPN 连接。
但有一个有关 SSTP 服务器配置的文章,并且KB947054,描述了一种更改 SSTP 服务器用于接受传入连接的端口的方法。使用注册表编辑器,找到以下子项:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Sstpsvc\Parameters
然后将ListenerPort
DWORD 值设置为用于传入 SSTP 连接的端口号。确保将其指定为十进制值(默认情况下,选择“十六进制”单选按钮)。选择一个不会与系统或应用程序使用的其他端口冲突的端口。
要应用新设置,请重新启动“路由和远程访问”服务。检查命令的输出netstat -aon
以确认新指定的端口现已使用,并且端口 443 不再使用。
答案2
这是一个老问题,但我想添加一些其他选项。
这两者的优点是您仍然可以继续在端口 443 上使用 SSTP。这特别有用,因为此端口在大多数公司、酒店、热点等防火墙中都是开放的,允许您在 PPTP/IPSec/... 会失败的地方建立 VPN 连接。
使用 IIS 代替 Apache
您可以在 IIS 上运行几乎任何可以在 Apache 上运行的东西(例如 PHP)。
您可以使用 Microsoft Web 平台安装程序为您进行设置:http://www.microsoft.com/web/downloads/platform.aspx 从那里您可以安装各种框架。
如果您特别想要 PHP(这只会启动预先选择了 PHP 的 Web 平台安装程序):http://www.microsoft.com/web/platform/phponwindows.aspx
这在 Windows 上也比 Apache 快得多。
Apache 以 IIS 为反向代理
让 IIS 监听端口 443(SSL 卸载)并转发到 Apache(在端口 80 或其他端口上)。
在 Google 上搜索“IIS 反向代理”。您的选项是 URL 重写或应用程序请求路由 (ARR)。
某些 Web 应用程序可能必须经过特殊配置才能在反向代理后面工作,因为传入的 URL 将被代理修改。
答案3
我已经创建了一个 VBS 文件来快速更改 SSTP 的端口。
If WScript.Arguments.length = 0 Then
Set ObjShell = CreateObject("Shell.Application")
ObjShell.ShellExecute "wscript.exe", """" & WScript.ScriptFullName & """" & " RunAsAdministrator",, "runas", 1
WScript.Quit
End If
Set objRegistry = GetObject("winmgmts:\\.\root\default:StdRegProv")
strValue = InputBox("Desired new port for SSTP:")
objRegistry.SetDWORDValue &H80000002, "SYSTEM\CurrentControlSet\services\SstpSvc\Parameters", "ListenerPort", strValue
MsgBox "SSTP ListenerPort has been changed to " & strValue & "."
将其复制并粘贴到新的文本文档中,然后将扩展名更改为.vbs
。
您还可以下载此脚本这里。
更改端口后,您需要以管理员身份进入命令提示符(创建cmd.exe
快捷方式并以管理员身份运行)。然后输入以下两个命令:
net stop "routing and remote access"
net start "routing and remote access"