<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[gOxiA=苏繁=SuFan's Blog]]></title> 
<link>http://goxia.maytide.net/index.php</link> 
<description><![CDATA[Microsoft MVP]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[gOxiA=苏繁=SuFan's Blog]]></copyright>
<item>
<link>http://goxia.maytide.net/read.php/1161.htm</link>
<title><![CDATA[识别 ISA Server 的版本号]]></title> 
<author>gOxiA &lt;goxia@live.cn&gt;</author>
<category><![CDATA[ISA Server]]></category>
<pubDate>Thu, 26 Feb 2009 03:57:10 +0000</pubDate> 
<guid>http://goxia.maytide.net/read.php/1161.htm</guid> 
<description>
<![CDATA[ 
	<p><a href="http://goxia.maytide.net/ftpupfiles/ISAServer_A7CA/logoheaderffisaserver.gif"><img style="display: inline; border-width: 0px" src="http://goxia.maytide.net/ftpupfiles/ISAServer_A7CA/logoheaderffisaserver_thumb.gif" border="0" alt="logo-header-ff-isaserver" title="logo-header-ff-isaserver" width="326" height="80" /></a> 识别 ISA Server 的版本号</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ISA Server 上我们从产品关于信息中能够看到当前的版本号码，但是却很难确定该版本号码所对应的版本名称。今天 gOxiA 从 <a href="http://blogs.technet.com/isablog/archive/2009/02/25/isa-server-build-numbers.aspx" target="_blank">Forefront TMG(ISA Server) Product Team Blog</a> 看到了 ISA Server 版本号的说明，特记录至此作为备忘，便于今后使用。</p><p><strong>ISA Server 2000 (SE and EE)</strong></p><p>RTM 3.0.1200.50</p><p>SP1 3.0.1200.166</p><p>FP1 3.0.1200.235</p><p>SP2 3.0.1200.365</p><p>Latest HotFix (not accumulated) 1200.443</p><p><strong>ISA Server 2004 SE</strong></p><p>BETA 4.0.2161.153</p><p>RTM 4.0.2161.50</p><p>SP1 4.0.2163.213</p><p>SP2 4.0.2165.594</p><p>SP3 4.0.2167.887</p><p>Latest HotFix (accumulated) 2167.905</p><p><a href="http://support.microsoft.com/kb/951958">KB951958</a></p><p><strong>ISA 2004 EE</strong></p><p>BETA 4.0.3437.63</p><p>RTM 4.0.3439.50</p><p>SP2 4.0.3443.594</p><p>SP3 4.0.3445.887</p><p>Latest HotFix (accumulated) 3445.905</p><p><a href="http://support.microsoft.com/kb/951958">KB951958</a></p><p><strong>ISA Server 2006 EE/SE</strong></p><p>RTM 5.0.5720.100</p><p>Supportability 5.0.5721.240</p><p>SP1 5.0.5723.493</p><p>latest hotfix 5.0.5723.507</p><p><a href="http://support.microsoft.com/kb/960148">KB 960148</a></p><br/>Tags - <a href="http://goxia.maytide.net/go.php/tags/isa/" rel="tag">isa</a> , <a href="http://goxia.maytide.net/go.php/tags/server/" rel="tag">server</a> , <a href="http://goxia.maytide.net/go.php/tags/build/" rel="tag">build</a>
]]>
</description>
</item><item>
<link>http://goxia.maytide.net/read.php/1104.htm</link>
<title><![CDATA[[Troubleshooting] ISA Server 出现 TermService 1036 无法远程桌面]]></title> 
<author>gOxiA &lt;goxia@live.cn&gt;</author>
<category><![CDATA[ISA Server]]></category>
<pubDate>Fri, 21 Nov 2008 09:19:51 +0000</pubDate> 
<guid>http://goxia.maytide.net/read.php/1104.htm</guid> 
<description>
<![CDATA[ 
	<p><img alt="" src="http://goxia.maytide.net/ftpupfiles/ISAServerExchangeServerOWA_E2A3/image_thumb.png" /> ISA Server 出现 TermService 1036 导致无法远程桌面<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一台 ISA Server 2006 with SP1 标准版，每次停电重新启动后会导致不论从内部还是外部均无法远程桌面到该服务器上故障。一直找不到原因，困扰已久！唯一的解决办法就是删除访问策略重新添加，便可以恢复正常，甚是诡异！<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这次再次发生这个故障，不过总算是找到了线索，留意到一个事件日志，如下图所示：<br /><a href="http://goxia.maytide.net/ftpupfiles/TroubleshootingISAServerTermService1036_F3D1/remotedesktoperror_isa.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="remotedesktoperror_isa" width="406" height="446" src="http://goxia.maytide.net/ftpupfiles/TroubleshootingISAServerTermService1036_F3D1/remotedesktoperror_isa_thumb.png" /></a>&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 来源：TermServcice，事件ID：1036，描述：终端服务器会话创建失败。相关的状态代码为 0x2740。阅读了KB555382，该KB地址是：<a title="http://support.microsoft.com/kb/555382" href="http://support.microsoft.com/kb/555382">http://support.microsoft.com/kb/555382</a><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 了解到应该是 RDP 协议未能正确绑定网卡而导致的。根据 KB 对注册表进行了检查，发现并为有异常。那么问题出在了哪里呢？！<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先重新审查 ISA Server 的配置及规则策略。该 ISA Server 外部绑定有 3 个公网 IP，内部共有3块网卡，有2块物理网卡连接两个子网，一块 Microsoft Loopback 网卡用于虚拟机网络。为了方便管理，在其中一个公网 IP 上发布了局域网中一台服务器的 RDP 服务，另外两个发布了本机的其中一个内网网卡IP上。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OK，根据前面KB中所描述的信息，分析本案例发现，ISA Server 上的 RDP 绑定了所有网卡，也就是说在 Remote Desktop 启动后会对这些网卡上的 IP 进行侦听，假设我们创建了访问规则允许内部或外部访问 ISA Server 的 3389 或者创建了一个完全访问 ISA Server 规则，那么这条访问规则是正确的，ISA Server 开启了对本机 3389 的访问。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 但是，让我创建了一个发布规则，就意味着我需要在外部或某个接口上创建侦听，通俗讲就是在指定接口上创建了一个仿真服务用于接收用户请求，然后转向到指定要发布的服务器上。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 现在，真相大白了！原来是在 ISA Server 上创建的 RDP 发布规则与本机 RDP 协议冲突，从而导致重新启动后，RDP 启动失败。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因为本案例中涉及发布 RDP ，那么正确的配置可以是这样的。配置 RDP 协议只侦听内部的一块网卡，然后创建侦听来自外部的 RDP 请求即可！<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 问题很简单，但是一直没有注意到，可能也是因为创建的发布规则并没有收到 ISA Server 的警告。不过，自己做深刻检讨！主要的原因还是在自己&hellip;&hellip;</p><br/>Tags - <a href="http://goxia.maytide.net/go.php/tags/isaserver/" rel="tag">isaserver</a> , <a href="http://goxia.maytide.net/go.php/tags/termservice/" rel="tag">termservice</a> , <a href="http://goxia.maytide.net/go.php/tags/remotedesktop/" rel="tag">remotedesktop</a>
]]>
</description>
</item><item>
<link>http://goxia.maytide.net/read.php/1068.htm</link>
<title><![CDATA[在工作组环境下的 ISA Server 2006 上发布 Windows SBS 2003 R2 ST 中的 Exchange Server OWA]]></title> 
<author>gOxiA &lt;goxia@live.cn&gt;</author>
<category><![CDATA[ISA Server]]></category>
<pubDate>Wed, 17 Sep 2008 10:11:13 +0000</pubDate> 
<guid>http://goxia.maytide.net/read.php/1068.htm</guid> 
<description>
<![CDATA[ 
	<a href="http://goxia.maytide.net/ftpupfiles/ISAServerExchangeServerOWA_E2A3/image.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="47" alt="image" width="165" border="0" src="http://goxia.maytide.net/ftpupfiles/ISAServerExchangeServerOWA_E2A3/image_thumb.png" /></a><a href="http://goxia.maytide.net/ftpupfiles/ISAServerExchangeServerOWA_E2A3/image_3.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="47" alt="image" width="315" border="0" src="http://goxia.maytide.net/ftpupfiles/ISAServerExchangeServerOWA_E2A3/image_thumb_3.png" /></a><a href="http://goxia.maytide.net/ftpupfiles/ISAServerExchangeServerOWA_E2A3/image_4.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="47" alt="image" width="194" border="0" src="http://goxia.maytide.net/ftpupfiles/ISAServerExchangeServerOWA_E2A3/image_thumb_4.png" /></a><br /><br /><span style="font-size: larger"><i><b>在工作组环境下的 ISA Server 2006 上发布 Windows SBS 2003 R2 ST 中的 Exchange Server OWA<br /></b></i></span><br />环境说明：<br />两个子网（子网 A 和子网 B）分别是两个独立的 AD，其中子网 B 基于 Windows SBS 2003 R2，共同使用同一台 ISA Server 2006 访问互联网，并同时使用同一个公网 IP 用于服务的发布。其中 子网 A 暂不提供邮件服务的发布。<br /><br />实施目标：<br />使用 ISA Server 2006 发布子网 B 中 Windows SBS 2003 R2 上 Exchange Server 的 OWA<br /><br />实施要点：<br />1、导出 Windows SBS 2003 R2 中涉及的证书；<br />2、修改 Exchange Server 中的 HTTP 协议，禁用&ldquo;启用基于表单的身份验证&rdquo;；<br />3、在 ISA Server 2006 上导入 Windows SBS 2003 R2 的证书；<br />4、在 ISA Server 2006 上访问 OWA 进行测试，确保访问过程无任何提示警告（如：证书警告）；<br />5、在 ISA Server 2006 上配置 LDAP 服务器的访问；<br />6、在 ISA Server 2006 上创建用于发布服务的端口侦听；<br />7、在 ISA Server 2006 上创建用于发布 OWA 的防火墙策略；<br /><br />实施步骤：<br />一、在 Windows SBS 2003 R2 中导出证书，该证书用于 ISA Server 2006 发布 OWA 时所需。<br />1、在 Windows SBS 2003 R2 上打开 IIS 管理器，进入 Exchange 站点属性。<a href="http://goxia.maytide.net/ftpupfiles/ISAServerExchangeServerOWA_E2A3/export_cert_1.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="360" alt="export_cert_1" width="504" border="0" src="http://goxia.maytide.net/ftpupfiles/ISAServerExchangeServerOWA_E2A3/export_cert_1_thumb.png" /></a><br/>............<br/>
]]>
</description>
</item><item>
<link>http://goxia.maytide.net/read.php/76.htm</link>
<title><![CDATA[推荐：Microsoft Internet Security and Acceleration (ISA) Server 2006 支持更新]]></title> 
<author>gOxiA &lt;goxia@live.cn&gt;</author>
<category><![CDATA[ISA Server]]></category>
<pubDate>Fri, 16 Nov 2007 08:12:10 +0000</pubDate> 
<guid>http://goxia.maytide.net/read.php/76.htm</guid> 
<description>
<![CDATA[ 
	<p>      早先在运营的一台 SBS 2003 上发现 ISA 日志监控中有非常详细的监控信息栏，感觉非常有用，可是发现自己手边的 ISA 及 Labs 里的 ISA 都没有这个功能，感觉非常遗憾，以为只有 SBS 2003 中的 ISA 包含这个特性，昨天在 QQ 群组中向大家询问了一下，发现有一个网友同样是 ISA 2006 但是有我说到的信息栏，郁闷！难道又遭遇 RPWT 了？！</p><p>      进入 Microsoft Download Center 寻找有关 ISA 的下载终于让我找到了，原来微软提供了一个针对 ISA 的支持更新包，安装这个支持更新包后，ISA 便拥有了强大的日志查询和分析的功能。看看下面的截图</p><p><img src="http://goxia.maytide.net/up/isasupporttools.jpg" /></p><p>官方详细的说明：</p><p>Microsoft Internet Security and Acceleration (ISA) Server 2006 支持更新</p><h4><font size="2">概述</font></h4><div class="downloadInfo"><a name="Description"></a><span>Internet Security and Acceleration (ISA) Server 2006 支持更新为 ISA Server 2006 标准版和 ISA Server 2006 企业版提供了增强的疑难解答工具和改进的日志查看器功能。强烈建议客户在所有运行 ISA Server 2006 的计算机上安装此支持更新。 <br /><br />可以在运行 ISA Server 2006 的计算机上直接安装 ISA Server 2006 支持更新，其中包括下列内容：<br /><br />• 自 ISA Server 2006 投入生产以来发布的所有软件更新。<br />• 改进的日志查看器功能，包括增强的详细信息窗格视图、文本着色和新增的日志筛选功能。 <br />• 更新的 ISA Server Microsoft 管理控制台 (MMC) 管理单元功能，凭借它可以直接从 ISA Server 管理控制台访问可用疑难解答工具和选项。 <br />• 与 Microsoft ISA Server Best Practices Analyzer 工具相集成。有关详细信息，请参阅 http://go.microsoft.com/fwlink/?LinkId=79754。<br />• 新增的诊断日志记录功能。</span></div><div class="downloadInfo"><span></span></div><div class="downloadInfo"><span>下载地址：<a href="http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=6f629eac-d8c6-4437-9d20-b47b02db413a">http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&amp;FamilyID=6f629eac-d8c6-4437-9d20-b47b02db413a</a></span></div>
]]>
</description>
</item><item>
<link>http://goxia.maytide.net/read.php/107.htm</link>
<title><![CDATA[[QAT] ISA 服务器遭遇 RPC 故障]]></title> 
<author>gOxiA &lt;goxia@live.cn&gt;</author>
<category><![CDATA[ISA Server]]></category>
<pubDate>Tue, 04 Sep 2007 04:57:54 +0000</pubDate> 
<guid>http://goxia.maytide.net/read.php/107.htm</guid> 
<description>
<![CDATA[ 
	<p>决定在 Blog 上有限地与大家公开分享我为网友解答问题及排错的经验和心得。这里需要注意标题中的 Q&amp;A&amp;T，他们分别是 Question；Answer；TroubleShooting 的缩写，其中要多加个 T 意在表示这个问题解答中包含排错的经验和心得。</p><p>网友Q：一台 ISA 服务器为 AD 成员，之前 ISA 运行良好，最近 ISA 总报 RPC 错误，无法登录到 AD?</p><p>A&amp;T：首选需要检查日志中是否有可疑的警告或错误事件报告，经过查阅发现一条来源：Winlogon，事件ID：1219的错误警告。</p><p><img src="/up/1188880372.jpg" border="0" width="374" height="356" /></p><p>在描述中明确指出RPC服务不可用，说明RPC及相关的服务出现了故障，使用addiag、dcdiag、netdiag分别作了测试，其中netdiag中检测到了可疑信息。</p><p>D:&#92;Support Tools&gt;netdiag</p><p>...................................</p><p>&nbsp;&nbsp;&nbsp; Computer Name: ISA<br />&nbsp;&nbsp;&nbsp; DNS Host Name: isa.contoso.com<br />&nbsp;&nbsp;&nbsp; System info : Windows 2000 Server (Build 3790)<br />&nbsp;&nbsp;&nbsp; Processor : x86 Family 15 Model 4 Stepping 3, GenuineIntel<br />&nbsp;&nbsp;&nbsp; List of installed hotfixes :<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KB911564<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KB925398_WMP64<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KB925876<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KB925902<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KB930178<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KB931768<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KB931784<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KB931836<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KB932168<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Q147222</p><p><br />Netcard queries test . . . . . . . : Passed<br />&nbsp;&nbsp;&nbsp; [WARNING] The net card 'RAS 同步适配器' may not be working because it has no<br />t received any packets.<br />&nbsp;&nbsp;&nbsp; GetStats failed for '直接并口'. [ERROR_NOT_SUPPORTED]<br />&nbsp;&nbsp;&nbsp; GetStats failed for 'WAN 微型端口 (PPTP)'. [ERROR_NOT_SUPPORTED]<br />&nbsp;&nbsp;&nbsp; GetStats failed for 'WAN 微型端口 (PPPOE)'. [ERROR_NOT_SUPPORTED]<br />&nbsp;&nbsp;&nbsp; [WARNING] The net card 'WAN 微型端口 (IP)' may not be working because it has<br />&nbsp;not received any packets.<br />&nbsp;&nbsp;&nbsp; GetStats failed for 'WAN 微型端口 (L2TP)'. [ERROR_NOT_SUPPORTED]<br />&nbsp;&nbsp;&nbsp; [WARNING] The net card 'Intel(R) PRO/1000 MT Network Connection' may not be<br />working.</p><p></p><p>Per interface results:</p><p>&nbsp;&nbsp;&nbsp; Adapter : contoso</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Netcard queries test . . . : Passed</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Host Name. . . . . . . . . : isa<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IP Address . . . . . . . . : 10.194.145.2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Subnet Mask. . . . . . . . : 255.255.255.0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Default Gateway. . . . . . :<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetBIOS over Tcpip . . . . : Disabled<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dns Servers. . . . . . . . : 10.194.145.5<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10.194.145.8</p><p><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AutoConfiguration results. . . . . . : Passed</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Default gateway test . . . : Skipped<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [WARNING] No gateways defined for this adapter.</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetBT name test. . . . . . : Skipped<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetBT is disabled on this interface. [Test skipped]</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WINS service test. . . . . : Skipped<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetBT is disable on this interface. [Test skipped].</p><p>&nbsp;&nbsp;&nbsp; Adapter : Internet</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Netcard queries test . . . : Passed</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Host Name. . . . . . . . . : isa<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IP Address . . . . . . . . : 202.202.202.2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Subnet Mask. . . . . . . . : 255.255.255.248<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Default Gateway. . . . . . : 202.202.202.1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetBIOS over Tcpip . . . . : Disabled<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dns Servers. . . . . . . . : 202.202.202.202</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IpConfig results . . . . . : Failed</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [WARNING] Your default gateway is not on the same subnet as your IP<br />address.</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AutoConfiguration results. . . . . . : Passed</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Default gateway test . . . : Passed</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetBT name test. . . . . . : Skipped<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetBT is disabled on this interface. [Test skipped]</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WINS service test. . . . . : Skipped<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetBT is disable on this interface. [Test skipped].</p><p>&nbsp;&nbsp;&nbsp; Adapter : VPDN</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Netcard queries test . . . : Passed</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Host Name. . . . . . . . . : isa<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IP Address . . . . . . . . : 10.194.146.129<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Subnet Mask. . . . . . . . : 255.255.255.192<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Default Gateway. . . . . . :<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetBIOS over Tcpip . . . . : Disabled<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dns Servers. . . . . . . . :</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AutoConfiguration results. . . . . . : Passed</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Default gateway test . . . : Skipped<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [WARNING] No gateways defined for this adapter.</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetBT name test. . . . . . : Skipped<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetBT is disabled on this interface. [Test skipped]</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WINS service test. . . . . : Skipped<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetBT is disable on this interface. [Test skipped].</p><p>&nbsp;&nbsp;&nbsp; Adapter : DMZ</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Netcard queries test . . . : Passed</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Host Name. . . . . . . . . : isa<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IP Address . . . . . . . . : 172.16.0.1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Subnet Mask. . . . . . . . : 255.255.255.0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Default Gateway. . . . . . :<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetBIOS over Tcpip . . . . : Disabled<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dns Servers. . . . . . . . :</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AutoConfiguration results. . . . . . : Passed</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Default gateway test . . . : Skipped<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [WARNING] No gateways defined for this adapter.</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetBT name test. . . . . . : Skipped<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetBT is disabled on this interface. [Test skipped]</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WINS service test. . . . . : Skipped<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetBT is disable on this interface. [Test skipped].</p><p>&nbsp;&nbsp;&nbsp; Adapter : EP</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Netcard queries test . . . : Passed</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Host Name. . . . . . . . . : isa<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IP Address . . . . . . . . : 172.18.145.18<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Subnet Mask. . . . . . . . : 255.255.255.248<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Default Gateway. . . . . . :<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetBIOS over Tcpip . . . . : Disabled<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dns Servers. . . . . . . . :</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AutoConfiguration results. . . . . . : Passed</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Default gateway test . . . : Skipped<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [WARNING] No gateways defined for this adapter.</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetBT name test. . . . . . : Skipped<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetBT is disabled on this interface. [Test skipped]</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WINS service test. . . . . : Skipped<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetBT is disable on this interface. [Test skipped].</p><p>&nbsp;&nbsp;&nbsp; Adapter : JL</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Netcard queries test . . . : Failed<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetCard Status:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DISCONNECTED<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Some tests will be skipped on this interface.</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Host Name. . . . . . . . . : isa<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IP Address . . . . . . . . : 0.0.0.0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Subnet Mask. . . . . . . . : 0.0.0.0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Default Gateway. . . . . . :<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetBIOS over Tcpip . . . . : Disabled<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dns Servers. . . . . . . . :</p><p><br />&nbsp;&nbsp;&nbsp; Adapter : &#123;6981CD9A-AA04-4FEE-8986-0B672B1A35BE&#125;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Netcard queries test . . . : Passed</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Host Name. . . . . . . . . : isa<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IP Address . . . . . . . . : 10.194.146.65<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Subnet Mask. . . . . . . . : 255.255.255.255<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Default Gateway. . . . . . :<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dns Servers. . . . . . . . :</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AutoConfiguration results. . . . . . : Passed</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Default gateway test . . . : Skipped<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [WARNING] No gateways defined for this adapter.</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetBT name test. . . . . . : Passed<br /><span style="color: #c00000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [WARNING] At least one of the &lt;00&gt; 'WorkStation Service', &lt;03&gt; 'Messenge<br />r Service', &lt;20&gt; 'WINS' names is missing.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; No remote names have been found.</span></p><p><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WINS service test. . . . . : Skipped<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; There are no WINS servers configured for this interface.</span></p><p><br />Global results:</p><p><br />Domain membership test . . . . . . : Passed</p><p><br />NetBT transports test. . . . . . . : Passed<br />&nbsp;&nbsp;&nbsp; List of NetBt transports currently configured:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetBT_Tcpip_&#123;6981CD9A-AA04-4FEE-8986-0B672B1A35BE&#125;<br />&nbsp;&nbsp;&nbsp; 1 NetBt transport currently configured.</p><p><br />Autonet address test . . . . . . . : Passed</p><p><br />IP loopback ping test. . . . . . . : Passed</p><p><br />Default gateway test . . . . . . . : Passed</p><p><br /><span style="color: #c00000">NetBT name test. . . . . . . . . . : Passed<br />&nbsp;&nbsp;&nbsp; [WARNING] You don't have a single interface with the &lt;00&gt; 'WorkStation Servi<br />ce', &lt;03&gt; 'Messenger Service', &lt;20&gt; 'WINS' names defined.</span></p><p><br />Winsock test . . . . . . . . . . . : Passed</p><p><br />DNS test . . . . . . . . . . . . . : Passed</p><p><br /><span style="color: #c00000">Redir and Browser test . . . . . . : Failed<br />&nbsp;&nbsp;&nbsp; List of NetBt transports currently bound to the Redir<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetBT_Tcpip_&#123;6981CD9A-AA04-4FEE-8986-0B672B1A35BE&#125;<br />&nbsp;&nbsp;&nbsp; The redir is bound to 1 NetBt transport.</span></p><p><span style="color: #c00000">&nbsp;&nbsp;&nbsp; List of NetBt transports currently bound to the browser<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetBT_Tcpip_&#123;6981CD9A-AA04-4FEE-8986-0B672B1A35BE&#125;<br />&nbsp;&nbsp;&nbsp; The browser is bound to 1 NetBt transport.<br />&nbsp;&nbsp;&nbsp; [FATAL] Cannot send mailslot message to '&#92;contoso*MAILSLOTNETNETLOGON' vi<br />a redir. [ERROR_BAD_NETPATH]</span></p><p><br />DC discovery test. . . . . . . . . : Passed</p><p><br /><span style="color: #c00000">DC list test . . . . . . . . . . . : Failed<br />&nbsp;&nbsp;&nbsp; 'contoso': No DCs are up.</span></p><p><br /><span style="color: #c00000">Trust relationship test. . . . . . : Failed<br />&nbsp;&nbsp;&nbsp; 'contoso': No DCs are up (Cannot run test).<br />&nbsp;&nbsp;&nbsp; Secure channel for domain 'contoso' is to '&#92;WSUS.contoso.com'.</span></p><p><br />Kerberos test. . . . . . . . . . . : Skipped</p><p><br />LDAP test. . . . . . . . . . . . . : Passed<br /><span style="color: #c00000">&nbsp;&nbsp;&nbsp; [WARNING] Failed to query SPN registration on DC 'fileserver.contoso.com'.<br />&nbsp;&nbsp;&nbsp; [WARNING] Failed to query SPN registration on DC 'WSUS.contoso.com'.</span></p><p><br />Bindings test. . . . . . . . . . . : Passed</p><p><br />WAN configuration test . . . . . . : Skipped<br />&nbsp;&nbsp;&nbsp; No active remote access connections.</p><p><br />Modem diagnostics test . . . . . . : Passed</p><p>IP Security test . . . . . . . . . : Skipped</p><p>&nbsp;&nbsp;&nbsp; Note: run &quot;netsh ipsec dynamic show /?&quot; for more detailed information</p><p><br />The command completed successfully</p><p>D:&#92;Support Tools&gt;</p><p>从上述错误中可以看到一些服务器因 NetBT 故障导致运行错误，运行&quot;Services.msc&quot;进入服务管理器检查并允许自动运行&quot;TCP/IP NetBIOS helper&quot;服务，之后发现问题依然存在。继续检查内网连接的网卡TCP/IP属性配置下&ldquo;高级&rdquo;-&ldquo;WINS&rdquo;-&ldquo;NetBIOS 设置&rdquo;，应确保内部网卡启用&ldquo;默认&rdquo;设置或&ldquo;启用 TCP/IP 上的 NetBIOS&rdquo;设置。</p><p><img src="/up/1188881547.jpg" border="0" width="378" height="232" /></p><p>因管理员之前为了保证 ISA 的安全，禁用了&ldquo;TCP/IP NetBIOS helper&rdquo;服务，并且在TCP/IP高级属性中启用了&ldquo;禁用 TCP/IP 上的 NetBIOS&rdquo;（之前询问时管理员一直未回忆起进行过该项操作！:-)），导致 RPC 故障。经过恢复配置该问题得到了解决。建议，因为 ISA 为 AD 成员，所以因该保留内部网卡的TCP/IP配置，并为每个外部网卡单独配置&ldquo;禁用 TCP/IP 上的 NetBIOS&rdquo;，无须禁用&ldquo;TCP/IP NetBIOS helper&rdquo;服务。</p>
]]>
</description>
</item><item>
<link>http://goxia.maytide.net/read.php/182.htm</link>
<title><![CDATA[扩展 ISA 防火墙的SSL隧道端口范围]]></title> 
<author>gOxiA &lt;goxia@live.cn&gt;</author>
<category><![CDATA[ISA Server]]></category>
<pubDate>Tue, 22 May 2007 06:34:20 +0000</pubDate> 
<guid>http://goxia.maytide.net/read.php/182.htm</guid> 
<description>
<![CDATA[ 
	<p>      因为公司内部需要访问外部公网上的一个对帐系统，而这个对帐系统使用8443作为SSL的隧道端口，当从内部访问时便会出现错误。之前做过一次添加，因为升级到了ISA2006，重新修改了访问规则等配置，竟然忘记扩展端口了，最近频繁有员工反映这个问题，于是决定载入到 Blog 上做个永久性工作笔记。</p><p>      先创建一个.js文件，当然这个文件是从网上获取到现成的，我直接将代码粘贴至此，方便我拷贝。</p><p><div class="code">/*<br />  This program is Copyright (c) 2004 Microsoft Corporation.  <br />  <br />   All rights reserved.<br />  <br />   THIS CODE AND INFORMATION IS PROVIDED &quot;AS IS&quot; WITHOUT WARRANTY OF<br />   ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO<br />   THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A<br />   PARTICULAR PURPOSE.<br />  <br />   IN NO EVENT SHALL MICROSOFT AND/OR ITS RESPECTIVE SUPPLIERS BE<br />   LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY<br />   DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,<br />   WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS<br />   ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE<br />   OF THIS CODE OR INFORMATION.</p><p>   This program will allow the user to create, remove and display <br />   Tunnel Port Ranges on either ISA 2000 or ISA 2004.</p><p>   Revisions:<br />   - 08/19/2004 - First working version<br />*/</p><p>var g_oObjects = new Objects;<br />var g_oValues = new Values;<br />var g_oMessages = new Messages;</p><p>main();</p><p>/**********************************************************************<br /> * main()<br /> * This function:<br /> * 1. Attempts to create the ISA Admin COM object<br /> *  Determines if the environment is ISA 2K or ISA 2K4<br /> *  Sets g_oObjects.tpRanges to a proper TPR object<br /> *      Defers to ParseArgs() to perform the proper tasking<br /> * 2. calls into<br /> *      GetISA()<br /> *      ParseArgs()<br /> *  3. called by <br /> *  - user -<br /> *<br /> * if successful:<br /> * 1. g_oObjects.ISA and g_oObjects.ThisArray are valid ISA objects<br /> *  2. returns the result of GetISA() or ParseArgs() as appropriate<br /> *<br /> * if unsuccessful:<br /> * 1. called functions indicate the failure and cause<br /> *  2. returns the result of GetISA() or ParseArgs() as appropriate<br /> *********************************************************************/<br />function main()<br />&#123;<br /> //WScript.Echo( 'working in main().' );<br /> var iRtn;</p><p> iRtn = GetISA();<br /> if ( iRtn == g_oValues.OK )<br /> &#123;<br />   g_oObjects.tpRanges = <br />    g_oObjects.thisArray.ArrayPolicy.WebProxy.TunnelPortRanges;<br />     iRtn = ParseArgs( );<br /> &#125;</p><p> return iRtn;<br />&#125;</p><p><br />/**********************************************************************<br /> * GetISA( )<br /> * This function:<br /> * 1. Creates the default ISA COM object<br /> *  Determines if the environment is ISA 2K or ISA 2K4<br /> *  Sets g_oObjects.ISA to the proper ISA object<br /> * 2. calls into<br /> *  GetISA2KSE()<br /> *  GetISA2K4SE()<br /> *  ShowErrors()<br /> *  3. called by <br /> *  main()<br /> *<br /> * if successful:<br /> * 1. g_oObjects.ISA and g_oObjects.ThisArray are valid objects<br /> *  2. returns g_oValues.OK<br /> *<br /> * if unsuccessful:<br /> * 1. ShowErrors indicate the failure and cause<br /> * 2. returns values provided by called functions<br /> *********************************************************************/<br />function GetISA( )<br />&#123;<br /> //WScript.Echo( 'working in GetISA().' );<br /> var szSE = 'FPC.Root';<br /> var iRtn;<br /> <br /> try<br /> &#123;<br />  g_oObjects.ISA = new ActiveXObject( szSE );<br />  iRtn = GetISA2KSE( );<br />  if( iRtn == g_oValues.notISA2K )<br />  &#123; <br />   iRtn = GetISA2K4SE( );<br />  &#125;<br />  if( iRtn )<br />  &#123;<br />   WScript.Echo( g_oMessages.L_NoISA_txt )<br />   ShowUsage( WScript.Arguments );<br />  &#125;<br /> &#125;<br /> catch( err )<br /> &#123;<br />  ShowErrors( err, g_oMessages.L_NoISA_txt );<br />  ShowUsage( WScript.Arguments );<br />  iRtn = g_oValues.noISA;<br /> &#125;</p><p> return iRtn;<br />&#125;</p><p>/**********************************************************************<br /> * GetISA2KSE( )<br /> * This function:<br /> * 1. Distinguishes between ISA2KSE, ISA2KEE and ISA Admin-only<br /> * 2. calls into<br /> *  GetISA2K4EE()<br /> *  ShowErrors()<br /> *  3. called by <br /> *  GetISA()<br /> *<br /> * if successful:<br /> * 1. g_oObjects.ISA and g_oObjects.ThisArray are valid ISA objects<br /> *  2. returns g_oValues.OK<br /> *<br /> * if unsuccessful:<br /> * 1. ShowErrors indicate the failure and cause<br /> * 2. returns values provided by called functions<br /> *********************************************************************/<br />function GetISA2KSE( )<br />&#123;<br /> //WScript.Echo( 'working in GetISA2KSE().' );<br /> var fpcTypeArray = 2;<br /> var iRtn = g_oValues.OK;<br /> <br /> try<br /> &#123;<br />  if( g_oObjects.ISA.Type == fpcTypeArray )<br />  &#123;<br />   iRtn = GetISA2KEE( );<br />  &#125;</p><p>  if( iRtn == g_oValues.OK )<br />  &#123;<br />   g_oObjects.thisArray = g_oObjects.ISA.Arrays.GetContainingArray();<br />  &#125;<br /> &#125;<br /> catch( err )<br /> &#123;<br />  switch( ToHex( err.number ) )<br />  &#123;<br />   case g_oValues.lErrNotSupported:<br />    iRtn = g_oValues.notISA2K;<br />    err.clear;<br />    break;<br />   default:<br />    iRtn = err.number;<br />    ShowErrors( err, g_oMessages.L_notISA2K_txt );<br />  &#125;<br /> &#125;</p><p> return iRtn;<br /> <br />&#125;</p><p>/**********************************************************************<br /> * GetISA2KEE( )<br /> * This function:<br /> * 1. Sets g_oObjects.ISA to the correct EE context<br /> * 2. calls into<br /> *  GetISA2K4EE()<br /> *  ShowErrors()<br /> *  3. called by <br /> *  GetISASE()<br /> *<br /> * if successful:<br /> * 1. g_oObjects.ISA is a valid EE object<br /> *  2. returns g_oValues.OK<br /> *<br /> * if unsuccessful:<br /> * 1. ShowErrors indicate the failure and cause<br /> * 2. returns values provided by called functions<br /> *********************************************************************/<br />function GetISA2KEE( )<br />&#123;<br /> //WScript.Echo( 'working in GetISA2KEE().' );<br /> var szEE = 'FPCDS.Root';<br /> var iRtn;<br /> <br /> try<br /> &#123;<br />  g_oObjects.ISA = new ActiveXObject( szEE );<br />  iRtn = g_oValues.OK;<br /> &#125;<br /> catch( err )<br /> &#123;<br />  iRtn = err.number;<br />  ShowErrors( err, g_oMessages.L_ErrUnknown_txt );<br /> &#125;<br /> return iRtn;<br />&#125;</p><p>/**********************************************************************<br /> * GetISA2K4SE( )<br /> * This function:<br /> * 1. Sets g_oObjects.ISA to the an ISA 2004SE context<br /> * 2. calls into<br /> *  ShowErrors()<br /> *  3. called by <br /> *  GetISASE()<br /> *<br /> * if successful:<br /> * 1. g_oObjects.ISA is a valid ISA 2004 SE object<br /> *  2. returns g_oValues.OK<br /> *<br /> * if unsuccessful:<br /> * 1. ShowErrors indicate the failure and cause<br /> * 2. returns values according to determined state<br /> *********************************************************************/<br />function GetISA2K4SE( )<br />&#123;<br /> //WScript.Echo( 'working in GetISA2K4SE().' );<br /> var iRtn;<br /> <br /> try<br /> &#123;<br />  g_oObjects.thisArray = g_oObjects.ISA.GetContainingArray();<br />  g_oObjects.thisArray.Refresh();<br />  iRtn = g_oValues.OK;<br /> &#125;<br /> catch( err )<br /> &#123;<br />  switch( ToHex( err.number ) )<br />  &#123;<br />   case g_oValues.lErrNotFound:<br />    err.clear;<br />    iRtn = g_oValues.AdminOnly;<br />    break;<br />   default:<br />    iRtn = err.number<br />    ShowErrors( err, g_oMessages.L_ErrUnknown_txt );<br />  &#125;   <br /> &#125;<br /> return iRtn;<br />&#125;</p><p><br />/**********************************************************************<br /> * ParseArgs( )<br /> * This function:<br /> * 1. Evaluates the cmd-line arguments<br /> *     Calls appropriate function<br /> * 2. calls into<br /> *      AddRange()<br /> *      DelRange()<br /> *      ShowRanges()<br /> *  ShowUsage()<br /> *  3. called by <br /> *  main()<br /> *<br /> * if successful:<br /> * 1. user-defined action is executed<br /> *  2. returns value from called function<br /> *<br /> * if unsuccessful:<br /> * 1. returns values according to determined state<br /> *********************************************************************/<br />function ParseArgs( )<br />&#123;<br /> //WScript.Echo( 'working in ParseArgs( ).' );<br /> var Args = WScript.Arguments;<br /> var iRtn = g_oValues.badCommand;<br /> var szName = '';<br /> var szJob = '';<br /> var inx;<br /> <br /> if ( Args.length == 0 )<br /> &#123;<br />  return ShowRanges( '' );<br /> &#125;</p><p> szJob = Args( 0 ).toLowerCase();<br /> if( Args.length == 1 &amp;&amp; ( szJob == '/add' || szJob == '/del' ) )<br /> &#123;<br />  szJob = '';<br /> &#125;</p><p> if( Args.length &gt;= 2 )<br /> &#123;<br />  szName = Args( 1 );<br /> &#125;<br />  <br /> switch( szJob )<br /> &#123;<br />  case '/add':<br />   if( Args.length &gt;= 3 &amp;&amp; CheckPorts( Args ) == g_oValues.OK )<br />   &#123;<br />    if( AddRange( Args ) == g_oValues.OK )<br />    &#123;<br />     ShowRanges( szName );<br />    &#125;<br />    else<br />    &#123;<br />     ShowRanges( '' );<br />    &#125;<br />   &#125;<br />   else<br />   &#123;<br />    ShowUsage( Args );<br />   &#125;<br />   break;<br />  case '/del':<br />   if( Args.length &gt;= 2 )<br />   &#123;<br />    iRtn = DelRange( szName );<br />    ShowRanges( '' );<br />   &#125;<br />   else<br />   &#123;<br />    ShowUsage( Args );<br />   &#125;<br />   break;<br />  case '/show':<br />   iRtn = ShowRanges( szName );<br />   break;<br />  default:<br />   ShowUsage( Args );<br /> &#125;<br /> return iRtn;<br />&#125;</p><p><br />/**********************************************************************<br /> * AddRange( )<br /> * This function:<br /> * 1. Adds a defined tunnel port range to ISA Web Proxy<br /> * 2. calls into<br /> *  ShowError()<br /> *  3. called by <br /> *  ParseArgs()<br /> *<br /> * if successful:<br /> * 1. user-defined tunnel port range is added<br /> *  2. returns g_oValues.OK<br /> *<br /> * if unsuccessful:<br /> * 1. returns values according to failure state<br /> *********************************************************************/<br />function AddRange( oArgs )<br />&#123;<br /> //WScript.Echo( 'working in AddRange().' );<br /> var iRtn = g_oValues.OK;<br /> var name = '';<br /> var port1 = 0;<br /> var port2 = 0;</p><p> name = oArgs( 1 );<br /> port1 = oArgs( 2 );</p><p> if( oArgs.length == 3 )<br /> &#123;<br />  port2 = port1;<br /> &#125;<br /> else<br /> &#123;<br />  port2 = oArgs( 3 );<br /> &#125;</p><p> if( port1 &gt; port2 )<br /> &#123;<br />  port1 = oArgs( 3 );<br />  port2 = oArgs( 2 );<br /> &#125;</p><p> if( DoesItExist( name, port1, port2 ) )<br /> &#123;<br />  return g_oValues.PortsExist ;<br /> &#125;</p><p> try<br /> &#123;<br />  g_oObjects.tpRanges.AddRange( name, port1, port2 );<br />  g_oObjects.tpRanges.Save();<br />  WScript.Echo( g_oMessages.L_RestartSvcs_txt );<br />  iRtn = g_oValues.OK;<br /> &#125;<br /> catch( err )<br /> &#123;<br />  iRtn = err.number;<br />  ShowErrors( err, g_oMessages.L_GenError_txt + <br />     ' adding \'' + name + '\'.\r\n' );<br /> &#125;<br /> return iRtn;<br />&#125;</p><p><br />/**********************************************************************<br /> * DelRange( )<br /> * This function:<br /> * 1. Removes a defined tunnel port range from ISA Web Proxy<br /> * 2. calls into<br /> *  ShowError()<br /> *  3. called by <br /> *  ParseArgs()<br /> *<br /> * if successful:<br /> * 1. user-defined tunnel port range is removed<br /> *  2. returns g_oValues.OK<br /> *<br /> * if unsuccessful:<br /> * 1. returns values according to failure state<br /> *********************************************************************/<br />function DelRange( szName )<br />&#123;<br /> //WScript.Echo( 'working in DelRange().' );<br /> var iRtn = g_oValues.OK;</p><p> try<br /> &#123;<br />  g_oObjects.tpRanges.Remove( szName );<br />  g_oObjects.tpRanges.Save();<br />  WScript.Echo( g_oMessages.L_RestartSvcs_txt );<br />  iRtn = g_oValues.OK;<br /> &#125;<br /> catch( err )<br /> &#123;<br />  if( ToHex( err.number ) == g_oValues.lErrNotFound )<br />  &#123;<br />   WScript.Echo( '\'' + szName + g_oMessages.L_TprNotFound_txt );<br />  &#125;<br />  else<br />  &#123;<br />   iRtn = err.number<br />   ShowErrors( err, g_oMessages.L_GenError_txt + <br />      ' deleting \'' + szName + '\'.\r\n' );<br />  &#125;<br /> &#125;<br /> return iRtn;<br />&#125;</p><p><br />/**********************************************************************<br /> * ShowRanges( )<br /> * This function:<br /> * 1. displays eiither a selected range or the entire tunnel port ranges<br /> *     listing depending on user-provided options<br /> * 2. calls into<br /> *      ShowRange()<br /> *      ShowUsage()<br /> *  3. called by <br /> *  ParseArgs()<br /> *<br /> * if successful:<br /> * 1. user-defined tunnel port range or entire tunnel port definition<br /> *     is displayed<br /> *<br /> * if unsuccessful:<br /> * 1. returns values according to failure state<br /> *********************************************************************/<br />function ShowRanges( szName )<br />&#123;<br /> //WScript.Echo( 'working in ShowRanges(' + szName + ').' );<br /> var cTprList = null;<br /> var TPR  = null;<br /> var iRtn = g_oValues.OK;</p><p> if( szName == '' )<br /> &#123;<br />     WScript.Echo ( g_oMessages.L_ShowList_txt );<br />  cTprList = new Enumerator( g_oObjects.tpRanges );<br />  for ( ; !cTprList.atEnd(); cTprList.moveNext() )<br />  &#123;<br />         TPR = cTprList.item();<br />   ShowRange( TPR );<br />     &#125;<br />  return iRtn;<br /> &#125;<br />  <br /> try<br /> &#123;<br />  TPR = g_oObjects.tpRanges( szName );<br />     WScript.Echo ( g_oMessages.L_ShowItem_txt + szName + ':\r\n' );<br />  ShowRange( TPR );<br /> &#125;<br /> catch( err )<br /> &#123;<br />  if( ToHex( err.number ) == g_oValues.lErrNotFound )<br />  &#123;<br />   WScript.Echo( '\'' + szName + g_oMessages.L_TprNotFound_txt );<br />   iRtn = ShowRanges( '' );<br />  &#125;<br />  else<br />  &#123;<br />   iRtn = err.number<br />   ShowErrors( err, g_oMessages.L_GenError_txt + <br />      ' showing \'' + szName + '\'.\r\n' );<br />  &#125;<br /> &#125;<br /> return iRtn;<br />&#125;</p><p><br />/**********************************************************************<br /> * ShowRange( )<br /> * This function:<br /> * 1. displays the data from a selected tunnel pot range<br /> * 2. calls into<br /> *     - none -<br /> *  3. called by <br /> *  ShowRanges()<br /> *<br /> * if successful:<br /> * 1. selected tunnel port range definition is displayed<br /> *<br /> * if unsuccessful:<br /> * 1. dunno<br /> *********************************************************************/<br />function ShowRange( oTPR )<br />&#123;<br /> //WScript.Echo( 'working in ShowRange(' + oTPR.Name + ' ).' );</p><p>    if ( oTPR.TunnelLowPort == oTPR.TunnelHighPort )<br /> &#123;<br />        WScript.Echo( '\t' + oTPR.Name + ' (single port): ' + oTPR.TunnelLowPort );<br /> &#125;<br />    else<br /> &#123;<br />        WScript.Echo( '\t' + oTPR.Name + ' (port range) : ' + oTPR.TunnelLowPort + <br />            ' --&gt; ' + oTPR.TunnelHighPort );<br /> &#125;<br />&#125;</p><p>/**********************************************************************<br /> * CheckPorts( oArgs )<br /> * This function:<br /> * 1. Compares the user-specified port values to predefined limits<br /> * 2. calls into<br /> *     - none -<br /> *  3. called by <br /> *  ParseArgs()<br /> *<br /> * Returns g_oValues.OK if ports are within limits, g_oValues.badCommand<br />     otherwise<br /> *********************************************************************/<br />function CheckPorts( oArgs )<br />&#123;<br /> var iRtn = g_oValues.OK;<br /> <br /> if( parseInt( oArgs( 2 ) ) &lt; 1 ||<br />  parseInt( oArgs( 2 ) ) &gt; 65535 )<br />  &#123;<br />   WScript.Echo( '\'' + oArgs( 2 ) + '\'' + g_oMessages.L_NaN_txt );<br />   iRtn = g_oValues.badCommand;<br />  &#125;<br /> if( oArgs.length &gt;= 4 )<br /> &#123;<br />  if( parseInt( oArgs( 3 ) ) &lt; 1 ||<br />   parseInt( oArgs( 3 ) ) &gt; 65535 )<br />   &#123;<br />    WScript.Echo( '\'' + oArgs( 3 ) + '\'' + g_oMessages.L_NaN_txt );<br />    iRtn = g_oValues.badCommand;<br />   &#125;<br /> &#125;<br /> return iRtn;<br />&#125;</p><p>/**********************************************************************<br /> * DoesItExist( szName, iPort1, iPort2 )<br /> * This function:<br /> * 1. compares the new port range data to existing definitions<br /> * 2. calls into<br /> *  - nothing -<br /> *  3. called by <br /> *  AddRange()<br /> *<br /> *  4 Returns true if definition exists in any form, false otherwise<br /> *<br /> * errors are not evaluated<br /> *********************************************************************/<br />function DoesItExist( szName, iPort1, iPort2 )<br />&#123;<br /> //WScript.Echo( 'working in DoesItExist(' + szName + ', ' + iPort1 + ', ' + iPort2 + ').' );<br /> var TPR;<br /> var cTprList = new Enumerator( g_oObjects.tpRanges );</p><p> for ( ; !cTprList.atEnd(); cTprList.moveNext() )<br /> &#123;<br />        TPR = cTprList.item();<br />  if( TPR.Name.toLowerCase() == szName.toLowerCase() ||<br />   ( TPR.TunnelLowPort == iPort1 &amp;&amp; <br />    TPR.TunnelHighPort == iPort2 )<br />    )<br />  &#123;<br />   WScript.Echo( g_oMessages.L_TprExists_txt + TPR.Name + '\'' );<br />   return true;<br />  &#125;<br />    &#125;<br /> return false;<br />&#125;</p><p>/**********************************************************************<br /> * ToHex( lValue)<br /> * This function:<br /> * 1. Converts a number to its hexadecimal equivalent and accounts for <br /> *  negative numbers (hResults)<br /> * 2. calls into<br /> *  - nothing -<br /> *  3. called by <br /> *  - nearly all functions -<br /> *<br /> * errors are not evaluated<br /> *********************************************************************/<br />function ToHex( lValue)<br />&#123;<br /> var lNewVal;<br /> var szHexVal;</p><p> if( lValue &gt;= 0 &amp;&amp; lValue &lt; 10 )<br /> &#123;<br />  szHexVal = lValue.toString();<br /> &#125;<br /> else<br /> &#123;<br />  lNewVal = ( lValue &lt; 0 )? lValue + 0x100000000: lValue;<br />  szHexVal = lNewVal.toString( 16 ).toUpperCase();<br /> &#125;<br /> return szHexVal;<br />&#125;</p><p>/**********************************************************************<br /> * ShowErrors( oErr, szMessage )<br /> * This function:<br /> * 1. Displays szMessage and any error data if not running in MPSReports<br /> *  <br /> * 2. calls into<br /> *  LogMessage<br /> *  3. called by <br /> *  - nearly all functions -<br /> *<br /> * errors are not evaluated<br /> *********************************************************************/<br />function ShowErrors( oErr, szMessage )<br />&#123;<br /> var WshShell = new ActiveXObject( 'WScript.Shell' );<br /> var Exclamation = 48;<br /> var YesNo = 4;<br /> var Yes = 6;<br /> var No = 7;<br /> var RtnVal;<br /> <br /> if( oErr != null )<br /> &#123;<br />   szMessage += g_oMessages.L_ErrNum_txt + ToHex( oErr.number ) + <br />     g_oMessages.L_ErrDesc_txt + oErr.description +<br />     g_oMessages.L_CopyMsg_txt;<br /> &#125;</p><p> RtnVal = WshShell.Popup( szMessage, 0, g_oMessages.L_TitleMsg_txt, <br />       Exclamation + YesNo );<br /> if( RtnVal == No )<br /> &#123;<br />  WScript.quit();<br /> &#125;<br /> oErr.clear;<br />&#125;</p><p>/**********************************************************************<br /> * ShowErrors( oErr, szMessage )<br /> * This function:<br /> * 1. Displays szMessage and any error data if not running in MPSReports<br /> *  <br /> * 2. calls into<br /> *  LogMessage<br /> *  3. called by <br /> *  - nearly all functions -<br /> *<br /> * errors are not evaluated<br /> *********************************************************************/<br />function ShowUsage( oArgs )<br />&#123;<br /> var szJob = WScript.ScriptName;<br /> var inx;<br /> <br /> for( inx = 0; inx &lt; oArgs.length; inx++ )<br /> &#123;<br />  szJob += ( ' ' + oArgs( inx ) );<br /> &#125;<br /> if( szJob.indexOf( '?' ) == -1 )<br /> &#123;<br />  WScript.Echo( g_oMessages.L_BadCommand_txt + '\'' + szJob + '\'\r\n' );<br /> &#125;<br /> WScript.Echo( g_oMessages.L_Usage_txt );<br />&#125;</p><p><br />/**********************************************************************<br /> * Objects()<br /> * This function holds our global objects<br /> *  <br /> *********************************************************************/<br />function Objects()<br />&#123;<br /> this.ISA = null;   //core ISA COM object<br /> this.thisArray = null;  //current operating array<br /> this.tpRanges = null;  //selected tunnel port range collection<br />&#125;</p><p>/**********************************************************************<br /> * Values()<br /> * This function holds our global values<br /> *  <br /> *********************************************************************/<br />function Values()<br />&#123;<br /> this.OK = 0;<br /> this.ng_oObjects = 999;  //failed to get a useful ISA COM object<br /> this.AdminOnly = 666;  //ISA Admin only<br /> this.notISA2K = 333;  //not an ISA 2000 COM<br /> this.badCommand = 123;<br /> this.PortsExist = 321;<br /> this.lErrNotFound = '80070002';  //E_NOT_FOUND<br /> this.lErrNotSupported = '800A01B6'; //method/property not supported<br /> this.lErrExists = '800700B7';  //item already exists<br />&#125;</p><p>/**********************************************************************<br /> * Messages()<br /> * This function holds our global messages<br /> *  <br /> *********************************************************************/<br />function Messages()<br />&#123;<br /> this.divider = '###############################################################################\r\n';<br /> this.L_Version_txt = '1.0';<br /> this.L_TitleMsg_txt = WScript.ScriptName + ' version ' + this.L_Version_txt;<br /> this.L_CopyMsg_txt = '\r\n\r\nHit &lt;Ctrl&gt;-C to copy this message to the clipboard.';<br /> this.L_noISA_txt = '\r\nISA COM objects are not properly registered on this machine.'<br /> this.L_notISA2K_txt = '\r\nThis is machine not an ISA 2000 Server.';<br /> this.L_notISA2K4_txt = '\r\nThis machine is not an ISA 2004 Server.';<br /> this.L_NoISA_txt = '\r\nThis is not an ISA Server.';<br /> this.L_ErrUnknown_txt = '\r\nUnknown error occured...';<br /> this.L_BadCommand_txt = '\r\n\t\tIncorrect usage: ';<br /> this.L_NaN_txt = ' is not a valid numerical value.';<br /> this.L_GenError_txt = 'Error encountered while ';<br /> this.L_TprNotFound_txt = '\' was not found in the list; make sure you typed it correctly.\r\n';<br /> this.L_TprExists_txt = 'That definiton already exists as \'';<br /> this.L_ShowList_txt = '\r\nThis is your current Tunnel Port Range list:\r\n';<br /> this.L_ShowItem_txt = '\r\nThis is the definition for ';<br /> this.L_ErrNum_txt = '\r\n\r\nError Number : ';<br /> this.L_ErrDesc_txt = '\r\nDescription  : ';<br /> this.L_ErrSource_txt = '\r\nSource       : ';<br /> this.L_RestartSvcs_txt = '\r\nThe Web Proxy service should be restarted to pick up the change.';<br /> this.L_Usage_txt = this.divider +<br />     '# \t\t\t' + this.L_TitleMsg_txt + '\r\n' +<br />     this.divider +<br />     '#\r\n' +<br />     '# You must execute this tool on an ISA Server as:\r\n' +<br />     '# cscript ' + WScript.ScriptName + ' [/opt1] [opt2] [port1] [port2], where:\r\n' +<br />     '# ..opt1 (text) \'/add\', \'/del\' or \'/show\'\r\n' +<br />      '# ..opt2 (text) The name of the tunnel port range.  This is mandatory for \r\n' +<br />      '#         \'/add\' and \'/del\', optional for \'/show\'.\r\n' +<br />     '# ..port1 (digit &gt;0 and &lt;65536 )\r\n' +<br />     '#         The first value of the port range.  This value is mandatory for \r\n' +<br />     '#         \'/add\' and is ignored for \'/del\' and \'/show\'.\r\n' +<br />     '# ..port2 (digit &gt;0 and &lt;65536 )\r\n' +<br />     '#         The second value of the port range. This value is optional for \r\n' +<br />     '#         \'/add\' and is ignored for \'/del\' and \'/show\'.\r\n' +<br />     '#\r\n' +<br />     '#        The order of the port1 and port2 values is not important and if they\r\n' +<br />     '#        are equal, a static port definition will be created.\r\n' +<br />     '#\r\n' +<br />     '# Specifying no options displays all currently configured Tunnel Port entries.\r\n' +<br />     '#\r\n' +<br />     this.divider + <br />     '#\r\n' +<br />     '# Examples:\r\n' +<br />     '#\r\n' +<br />     '# cscript ' + WScript.ScriptName + ' /add port123 123\r\n' +<br />     '#         ..adds a single port called \'port123\' with a static value of \'123\'\r\n' +<br />     '# cscript ' + WScript.ScriptName + ' /add port123-124 123 124\r\n' +<br />     '#         ..adds a port range called \'port123-124\' with a range of \'123\'-\'124\'\r\n' +<br />     '# cscript ' + WScript.ScriptName + ' /del port123\r\n' +<br />     '#         ..removes a port range called \'port123\'\r\n' +<br />     '# cscript ' + WScript.ScriptName + ' /show port123\r\n' +<br />     '#         ..displays a port range called \'port123\'\r\n' +<br />     '# cscript ' + WScript.ScriptName + ' /show\r\n' +<br />     '#         ..displays all defined port ranges\r\n' +<br />     '#\r\n' +<br />     this.divider;<br />     <br />&#125;<br /></div></p><p>      之后运行这个脚本，将会显示当前使用的端口，之后添加我们需要的端口，如添加8443：</p><p><div class="code">cscript name.js /add Ext8443 8443</div></p><p>完毕。</p>
]]>
</description>
</item><item>
<link>http://goxia.maytide.net/read.php/301.htm</link>
<title><![CDATA[实践基于ISA环境的双线路策略路由访问]]></title> 
<author>gOxiA &lt;goxia@live.cn&gt;</author>
<category><![CDATA[ISA Server]]></category>
<pubDate>Mon, 25 Dec 2006 08:28:10 +0000</pubDate> 
<guid>http://goxia.maytide.net/read.php/301.htm</guid> 
<description>
<![CDATA[ 
	<p align="center"><font size="3"><strong>实践基于ISA环境的双线路策略路由访问</strong></font></p><p align="left">      国内Internet发展迅速，可是中国网通和中国电信之间的互联互通问题总是得不到改进而且越演越烈，就像那句话中讲到的，世界上最远的距离不是中国到美国，而是网通到电信！两大ISP间的竞争直接影响到了广大的网民，但是也是因为这样的竞争才又养活了不少靠互通产品发财的商人们！互通真的就这么难么？是的，互通就是这么难，大家想尽了办法去解决这个难题，用软件用设备统统上来，国内双WAN路由器卖的也是异常火爆，不少企业、特别是网吧成为支撑这些产品的大客户！软件方面好像并没有太好的产品出现，本身就受ISP的共享限制，谁还有精力去研发这些产品呢，虽然网上已经有不少通过类似VPN 技术实现的互联互通产品，可是毕竟中间存在一些应用兼容性、使用便捷性、安全性等诸多的问题！</p><p align="left">      在IDC应用上，目前最为成熟地实现双向多线路的主要技术就是BGP，但是对于企业和个人来说简直就是登天！对于我们的应用而言，我们只需要实现双线路访问就可以了！是购买设备好呢？还是使用纯软件方式来实现呢？之前已经说过软件的实现主要是通过一些开发商制作的程序连接到他们的多线路网络环境访问互联网，但是安全确实隐患要知道所有的数据都要经过他们，那么应用中涉及到的明文密码该如何解决安全问题呢？看似这种方式也不是一种很好的解决办法，玩玩还是可以的！而硬件方式也不乐观，有些网络环境可能使用硬件会制约整个企业应用，虽然这些硬件的内部系统功能也非常强大！我个人不考虑购置硬件！<br/>............<br/>
]]>
</description>
</item><item>
<link>http://goxia.maytide.net/read.php/306.htm</link>
<title><![CDATA[顺利实施基于ISA的双线路策略路由访问]]></title> 
<author>gOxiA &lt;goxia@live.cn&gt;</author>
<category><![CDATA[ISA Server]]></category>
<pubDate>Thu, 21 Dec 2006 12:52:19 +0000</pubDate> 
<guid>http://goxia.maytide.net/read.php/306.htm</guid> 
<description>
<![CDATA[ 
	<p>      今天公司网通的ADSL正式开通，决定不添加硬件路由器毕竟要节省成本啊，以下是需要考虑的问题：</p><p>      1、不添加专用路由器实现河南网通ADSL的共享上网</p><p>           解决办法：使用专用的破解程序，好像是有个北极星</p><p>      2、不添加专用双WAN路由器实现线路访问的自动选择</p><p>           解决办法：因为服务器是ISA，所以必须基于ISA来实现那么只有使用策略路由是最好的解决办法</p><p>      3、在一条线路出现问题后可以快速的切换</p><p>           解决办法：在ISA中配置额外线路为外部网络，使用批处理方式载入策略路由，如果线路出现问题则手工删除添加的路由</p><p>      4、服务器自动开机后能够自动拨号ADSL，并载入策略路由</p><p>           解决方法：因为中午开通测试，明天上班前要搞定不容多加思考采用专用帐号自动登录方式来实现，但是其中需要考虑几个方面避免不必要的麻烦</p><p>      哈哈，看来要考虑的问题和要做的工作还是很多的，不果总算在晚上9点左右测试并实施完毕，效果不错。接下来的几天会积极地测试并收集问题报告找到解决办法。当然也会尽快地将心得与大家分享！毕竟期间还是遇到不障碍！</p>
]]>
</description>
</item><item>
<link>http://goxia.maytide.net/read.php/706.htm</link>
<title><![CDATA[实现ISA2004的WPAD（自动发现功能）]]></title> 
<author>gOxiA &lt;goxia@live.cn&gt;</author>
<category><![CDATA[ISA Server]]></category>
<pubDate>Tue, 13 Sep 2005 04:55:49 +0000</pubDate> 
<guid>http://goxia.maytide.net/read.php/706.htm</guid> 
<description>
<![CDATA[ 
	<p>使ISA的功能和特性得到完全的体现，需要客户端安装FWC。其实原本我都是用sNAT模式，后来因为要做基于AD的身份验证访问，所以需要用到代理方式，为了客户端能够快速的配置，决定分发FWC，但是因为其默认安装后是自动查找ISA服务器，那么就必须开启ISA的WPAD功能。于是经过几番周折终于实现了ISA的WPAD。</p><p>其实之前作完配置一直有问题时因为早期作AD迁移遗留下来的一个小问题及我恢复过DHCP保留造成的。后来解决也就正常了，但是考虑了一下还是做一个完整的配置记录比较好！</p><p><font color="#ff6000">首先需要了解一下ISA的WPAD的感念（以下是引用微软MVP吕劼专栏中“深入探讨ISA Server的自动发现特性”的文字）：</font></p><p><font color="#d4d0c8">ISA Server是Microsoft开发的用于替代Microsoft Proxy Server2.0的最新代理服务器和防火墙产品，其强大的功能及易用性给不同规模的企业带来的很多显而易见的好处。因此，ISA Server也正在逐步的成为很多企业，特别的基于Microsoft网络的企业的首选代理服务器和防火墙产品。今天，朗月繁星想和大家一起来深入的研究一下ISA Server中的自动发现（AutoDiscovery）特性。</font></p><p><font color="#d4d0c8">        在一个全球性的企业里，网络覆盖全球的很多城市，在每个城市里或者站点里有很多ISA Server或者是ISA Server的阵列（Array）。工作在这个企业的员工有很大一部分是使用笔记本电脑来访问位于公司其他站点或者是Internet上的资源，我们知道如果一台客户机要访问位于ISA Server外端的资源就必须成为ISA Server的三种客户端之一，要么是SNAT客户端，要么是Web代理客户端，要么是Firewall Client客户端（以下简称FWC）。三种客户端的共同之处是要明确自己的代理服务器的位置，也就是要知道代理服务器的IP地址。然而，当一个移动用户从一个城市或者站点出差（漫游）到另外一个城市或者站点的时候，你该如何配置这些客户机使他们无障碍地访问Internet的资源？换句话讲你将做什么样的配置使这些移动的客户机顺利的找到提供代理服务的ISA Server？</font></p><p><font color="#d4d0c8">我想读到这里的朋友可能已经猜到了，是的，没错！就是利用ISA Server的自动发现（AutoDiscovery）特性！这是一个令人振奋的功能，下面朗月繁星就来谈谈支持自动发现（AutoDiscovery）特性所涉及的一些技术要素。</font></p><p><font color="#d4d0c8">如果您急于在网络中实现ISA Server的自动发现功能，你或许不需要了解过多的技术细节和讨论。这样，你可以直接参考设置“自动发现”之实施篇。<br />在此文中说的客户机和客户端是有区别的，客户机指用户使用的计算机，他可能使用Windows9x,Windows NT/2000或者其他Microsoft的操作系统，甚至是Linux；客户端指客户机操作系统上的某种应用程序或某种配置，例如，我们可以给Internet Explorer（以下简称IE）配置一个代理的信息，使之成为Web代理客户端；或者给用户的操作系统配置IP地址，网关以及DNS，这样这个操作系统就可以作为 SNAT客户端；如果您安装的ISA Server光盘中的Firewall Client，则运行在用户的操作系统上的网络应用程序的Winsock请求就会被FWC截获，从而做为ISA Server的FWC客户端。换句话说，客户机上可能存在多种客户端。此外，文中的domainsuffix.net指您的网络的DNS命名空间或者是您网络的域名称。在具体配置“自动发现”时，注意以您网络的所用的名称来代替domainsuffix.net。</font></p><p><br /><font color="#d4d0c8">自动发现（AutoDiscovery）特性的定义<br />自动发现是使ISA Server的客户端在不知道ISA Server的具体位置（IP地址）的情况下，通过网络上的其他网络服务来自动的发现ISA Server的IP地址及端口（Web代理客户需要知道提供Web代理服务的端口）的特性。</font></p><p><font color="#d4d0c8">何种的客户端可以利用自动发现（AutoDiscovery）特性<br />我们知道ISA Server有三种客户端类型，在这3中客户端类型中，只有Web代理客户端和FWC可以利用自动发现（AutoDiscovery）特性，SNAT客户端不行！而且对于客户机使用的操作系统也有一定要求，客户机的OS必须是下面列表中的一种：<br />Windows98<br />Windows ME<br />Windows 2000<br />Windows XP<br />注意：不包含WinNT和Win95（Win95可以利用DHCP服务器发现ISA Server）</font></p><p><font color="#d4d0c8">自动发现（AutoDiscovery）特性的机制讨论<br />之所以Microsoft称之为自动发现，足以证明ISA Server 的客户端在不经过“发现”这一过程前，是不知道代理服务器的具体位置的。那么，不难推断，在“发现”这一过程中，客户机肯定不是向ISA Server 来查询，所以就我的知识范围来讲，我想只有2种可以使用的方法来查找代理服务器ISA Server ：一个是通过发送广播，另外一个是向某个公共的中心服务器来查找这个信息。最终Microsoft采取了后者，我想这也是明智之选，因为以广播的方式查找，对于网络的利用极其不利。以太网中广播是任何网络管理员应该避免的问题，说广播是网络杀手，我想不会有人有异议！在一个LAN（或者VLAN）中，所有节点都处于一个广播域，所以，当其中一个节点发送广播数据帧时，任何处于这个广播域的所有其他节点都会处理这个帧，尽管这个帧对于很多节点都是毫无意义的。如果在一个包含一个非常的大的冲突域的基于CSMA/CD的以太网中，广播会导致处于这个冲突域的其他节点，无法“抢夺”到传输介质，而导致暂时无法发送和接受其他数据的情况，直到这个广播被所有节点处理完成。</font></p><p><font color="#d4d0c8">现在我们就来谈谈ISA Server的客户端是如何向中心服务器来查找代理服务器ISA Server的。这个中心服务器的角色可以是DNS，也可以是DHCP，或者是其两者（请放心，两者同时利用不会产生任何冲突，而是会提高发现ISA Server的机率）。Web代理客户端和FWC都可以利用DHCP和DNS来发现ISA Server。没有FWC只能使用其中之一（指DNS和DHCP），或者Web代理客户只能使用其中之一这样的限制。正是由于没有这样的限制，所以最终Web代理客户和FWC究竟是从DNS还是从DHCP来“自动发现”ISA Server的始终是我们困惑的问题。所以，朗月繁星分以下几种情况分析说明。</font></p><p><font color="#d4d0c8">如果客户机不是DHCP Client，那么不论的Web代理客户还是FWC都是不能通过DHCP服务器“自动发现”ISA Server的，那么就只能利用DNS服务器。向DNS查询的条件就是：客户机配置了DNS。如果DNS服务器上的WPAD记录配置正确，则查询成功；如果DNS服务器没有配置DNS或者错误配置了WPAD记录，则查询失败。如果客户机是DHCP Clinet，这种情况，客户机具备从DNS和DHCP“自动发现”ISA Server，但至于是否可以完成“自动发现”要看DHCP和DNS服务器的设置。执行的过程如下，DHCP Client在引发“发现”这个过程时，它会向自己的DHCP服务器发送Inform消息，当DHCP服务器收到这个信息后，会给客户机发送ACK信息，这个信息告诉客户机到什么位置去得到配置信息的文件，这个配置文件的作用就是把客户机配置成为Web代理客户端或者是FWC，配置成功后，客户机就可以通过ISA Server来访问特定的资源了。如果DHCP服务器上没有配置252记录（也就是用于支持自动发现特性的252记录），但客户机配置了DNS，则客户机就会向DNS服务器查询wpad.domainsuffix.net，如果DNS配置了WPAD记录，则“自动发现”成功，如果DNS服务器没有配置WPAD记录，则“自动发现”失败。若客户机根本没有配置DNS，那么也会失败。这里还有一点要注意，如果DHCP服务器虽然配置了252记录，但是配置有错误，那么客户机也不会在向DNS服务器查询，所以，结果还是会失败！有关上边的论述，我做了一张流程图，如图1，大家可以参考。</font></p><p><img src="http://goxia.maytide.net/up/1126584045.jpg" /></p><p><font color="#00a0ff">接下来就是我的操作步骤：</font></p><p><font color="#00a0ff">我的环境：<br />ISASrv：Windows Server 2003 ST SP1，ISA2004，DCHP，WINS，WAN219.154.154.1，LAN192.168.0.1<br />ADSrv：Windows Server 2003 ST SP1，AD，DNS<br />XPClient：Windows XP Pro SP2</font></p><p><font color="#00a0ff">备注：之前此环境使用的是sNat方式，在客户端直接配置网关访问，ISA上直接作了条Allow 4 All（嘿嘿比较懒）。后来准备实施基于AD身份验证的访问规则，发现客户端就无法访问了，后来才想起来需要配置代理方式才可以，还是群里的哥们提醒！想了想直接安装FWC又方便又可靠。于是开始实施（之前并不知道WPAD），之后发现自动查找ISA服务器失败，才搜索资料找到了微软MVP吕劼的那篇文章，粗略的浏览了一下，看了主要的细节，其实还是很头大，干脆做着理解着算了！（昨天本来就头脑混乱，没想到下午下班前还试验成功了！）</font></p><p><font color="#00a0ff">1、准备工作：<br />其实也没什么准备工作可言，XPClient的IE默认连接我全部不打勾，直接通过网关访问，DHCP已经配置好了TCP/IP数据。ISA在部署的时候就选择了安装FWC并共享。我所做的就是进入AD管理中为OU建立一个策略，分发FWC。</font></p><p><font color="#00a0ff">2、配置DNS和DHCP支持WPAD：<br />WPAD可以用DNS和DHCP实现，推荐两者都作设置，这样ISA在实现WPAD更加准确有效。<br />（1）DNS方式：<br />进入DNS控制台，查找ISA服务器的A记录，如果没有就建立。（废话，我的ISA是成员，所以在DNS中存在它的A记录）。<br />之后，为这个A记录建立一个CNAME记录，命名为WPAD（注：一定要用这个WPAD名字，别问问什么微软的ISA自动发现就认这个名字）<br /><img src="http://goxia.maytide.net/up/1126585359.jpg" /><br />理论上讲，到这里DNS下WPAD的设置就完成，客户端应该可以自动查询到ISA服务器，但是我这里的一些故障导致查询失败，所以就继续DHCP下WPAD的设置，浏览此文章的朋友可以自己试验一下。</font></p><p><font color="#00a0ff">（2）、DHCP方式：<br />首先进入DHCP控制台，单击DHCP服务器，右键选择“预定义的选项和值”，单击“添加”<br />之后在“名称”填写“WPAD”，数据类型选择“字符串”，“代码”填写“252”<br /><img src="http://goxia.maytide.net/up/1126585876.jpg" /><br />然后点击“确定”，并为此选型类型定义值为“http://isasrv.office.local:8080/wpad.dat”（<font color="#e00000">注：如果你只有一台ISA，那么这个值完全可以填写为IP方式，毕竟使用域名会增加一次对DNS的查询。另外wpad.dat必须是小写，因为ISA对他的名字大小写敏感。</font>）<br /><img src="http://goxia.maytide.net/up/1126586012.jpg" /><br />最后单击左侧选项中的“服务器选项”，右键选择“配置选项”，找到“252 WPAD”并购选，当完成这一步后，“作用域选项”中就自动添加上了此选择配置（在“服务器选项”上应用这个配置是一个高效的做法）。<br /><img src="http://goxia.maytide.net/up/1126586290.jpg" /></font></p><p><font color="#00a0ff">3、设置ISA启动WPAD<br />进入ISA2004控制台，单击ISA服务器，选择“配置”-“网络”-选择网络下的“内部”-右键“属性”<br />之后切换到“自动发现”购选“发布自动发布信息”<br /><img src="http://goxia.maytide.net/up/1126586591.jpg" /><br />最后切换到“防火墙客户端”，复查配置是否正确。（有网友提到如果将ISA服务器名称添写为IP，更加适合FWC客户端的查找，这里我依旧是用的是完整的FQDN，并且最终测试无错误！）<br /><img src="http://goxia.maytide.net/up/1126586805.jpg" /></font></p><p><font color="#00a0ff">完成以上的配置，ISA2004的WPAD就完成了。在客户端配置FWC自动查询，你就可以查找到ISA服务器。</font></p><p><font color="#00a0ff">结尾，在完成这些配置后我这边的客户端依旧无法找到ISA服务器，最终在DHCP中找到了问题，我设置的保留中出现了错误的MAC绑定，正好影响了AD服务器。修正后我这边才算大功告成！！欣慰啊。</font></p><p><font color="#000000">微软MVP吕劼的“深入探讨ISA Server的自动发现特性”这边文章的地址是：<br /><a href="http://www.microsoft.com/china/community/Columns/Lvjie/3.mspx">http://www.microsoft.com/china/community/Columns/Lvjie/3.mspx</a></font></p>
]]>
</description>
</item><item>
<link>http://goxia.maytide.net/read.php/708.htm</link>
<title><![CDATA[如何在ISA2004中实现EXCHANGE的OWA密码修改功能]]></title> 
<author>gOxiA &lt;goxia@live.cn&gt;</author>
<category><![CDATA[ISA Server]]></category>
<pubDate>Tue, 06 Sep 2005 10:08:21 +0000</pubDate> 
<guid>http://goxia.maytide.net/read.php/708.htm</guid> 
<description>
<![CDATA[ 
	<p>最近要啃啃 Exchange 这个产品，首先让我注意到的就是关于OWA通过ISA发布时密码修改的问题！本来打算自己做一下实验，后来因为环境比较差，所以把人家的经验总结摘抄到自己的Blog下，方便以后调试时参考！</p><p><strong>一、 设置EXCHANGE前后端服务器允许OWA修改密码</strong></p><p>1:修改后端服务器注册表<br />EXCHANGE 2003 OWA修改密码功能<br />HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSExchangeWEB\owa下面的<br />value  name:  DisablePassword<br />Type:  REG_DWORD<br />Data  :1<br />把1改为0</p><p>2：在后端服务器上建立虚拟目录<br />程序→管理工具→INTERNET服务器管理器→INTERNET信息服务界面<br /> 在默认WEB站点内，建立虚拟目录“IISADMPWD”字不错，切记。选择路径?<br />c:\windows\system32\inetsrv\iisadmpwd  。如果你安装IIS没改目录的话，就是这个目<br />录了。如果改了目录，你需要找到IISADMPWD目录。如果没有此目录，则你证书安装有<br />问题。安装权限选择“读取、运行脚本”。在IISADMPWD目录上选属性--目录安全性—<br />匿名访问和验证控制—编辑—勾选匿名访问，确定退出。</p><p>3：转到CMD界面<br />cd c:\inetpub\AdminScripts<br />运行以下的命令:<br />”adsutil.vbs set w3svc/passwordchangeflags 0”<br />注:出现提示一直点确定</p><p>4：为前端服务器申请证书<br />1) 建立CA服务器<br />2) 为WEB站点申请证书<br />选择服务器证书,在公共名称这里一定要注意要填写你在公网上的域名为前端WEB站点启用SSL</p><p>5：为前端服务器建立虚拟目录<br />程序→管理工具→INTERNET服务器管理器→INTERNET信息服务界面<br /> 在默认WEB站点内，建立虚拟目录“IISADMPWD”，应一字不错，切记。选择路径：<br />c:\windows\system32\inetsrv\iisadmpwd  。如果你安装IIS没改目录的话，就是这个目<br />录了。如果改了目录，你需要找到IISADMPWD目录。如果没有此目录，则你证书安装有<br />问题。安装权限选择“读取、运行脚本”。在IISADMPWD目录上选属性--目录安全性—<br />匿名访问和验证控制—编辑—勾选匿名访问，确定退出。<br />转到DOS字符界面<br />cd c:\inetpub\AdminScripts<br />运行以下的命令:<br />”adsutil.vbs set w3svc/passwordchangeflags 0”</p><p><strong>二、 把EXCHANGE的证书需要导出并导入给ISASERVER</strong></p><p>在前端服务器上,选择IIS管理器----默认网站----属性---目录安全性<br />选择复制到文件把证书导出,并把导出的文件COPY给ISASERVER计算机.<br />注:(在导出的时候一定要选择导出私钥)<br />在ISASERVER计算机上把证书导入.<br />在ISA服务器上运行输入MMC----证书----计算机证书<br />在证书控制台选择个人---所有任务导入证书</p><p><strong>三、 在ISA2004发布EXCHANGE的OWA</strong></p><p>1:打开ISA管理器选择防火墙策略邮件发布策略</p><p>2:选择访问类型的时候选择发布OWA,在桥接模式选项选择加密到客户端和邮件服务器</p><p>3:在WEB服务器选项选择EXCHANGE的前端服务器</p><p>4:公共域名处填写<a href="http://www.ISACN.ORG">WWW.ISACN.ORG</a>(注意:这里所填写的一定要和证书的域名一致)</p><p>5:选择WEB监听器选择启用SSL,在选择处加载在上面我们导入的证书</p><p>6:在建立的发布策略添加路径/IISADMPWD/*<br />要允许用户更改密码，务必向 Outlook Web Access 邮件服务器发布规则添加 /IISADMPWD/* 文件夹。否则，用户每次单击 Outlook Web Access 中的“更改密码”按钮时都会收到错误</p>
]]>
</description>
</item>
</channel>
</rss>