标题: 不重启OS的情况下启用IP转发功能
创建: 2004-09-23 10:13 更新: 链接: http://scz.617.cn/windows/200409231013.txt
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
IPEnableRouter REG_DWORD 0 禁用IP转发 1 启用IP转发
从9x至2003,均可通过该注册表项启用IP转发,但需要重启OS。而我出于某个理由需 要在不重启OS的情况下启用IP转发。flier建议先设置IPEnableRouter为1,禁用网卡 再启用网卡,尝试之后无效,可用ipconfig确认:
ipconfig /all | find /I "IP Routing Enabled" IP Routing Enabled. . . . . . . . : No
又向huyuguang请教同一问题,他倒是从未听说过注册表项IPEnableRouter,但从他 那得知"Routing and Remote Access/RemoteAccess"服务启用后路由功能随之启用。
net start RemoteAccess ipconfig /all | find /I "IP Routing Enabled" IP Routing Enabled. . . . . . . . : Yes
如果注册表项IPEnableRouter原本为0,启用RemoteAccess服务后IPEnableRouter的 值并未随之变为1。禁用RemoteAccess服务,设置IPEnableRouter为1,重启OS后发现 IP转发已生效,而RemoteAccess服务仍在禁用状态。这些测试表明两件事,一是IP转 发是独立于RemoteAccess服务的功能,二是完全可以不重启OS而启用IP转发。
与Immortal1015、ohg讨论了一番,IP转发属于IP层的基本功能,任何标准的TCP/IP 协议栈都会实现IP转发,Windows的实现也不例外,很可能只是tcpip.sys中的某个全 局标志变量决定是否走IP转发的流程,并不需要更多复杂的处理。他们建议我查看符 号信息,说不定直接就能看到某个可能相符的符号。
省略中间若干与mslug一起瞎折腾的步骤... ...
!@#$%^&*,至此才发现MSDN中本来就有相关函数说明:
DWORD WINAPI EnableRouter ( HANDLE *pHandle, OVERLAPPED *pOverlapped );