Skip to content

Latest commit

 

History

History
52 lines (39 loc) · 2.22 KB

200409231013.txt.md

File metadata and controls

52 lines (39 loc) · 2.22 KB

标题: 不重启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 );

DWORD WINAPI UnenableRouter ( OVERLAPPED *pOverlapped, LPDWORD lpdwEnableCount );