1. 路由器只有WAN口可以设置默认网关和配置路由;
2. 无线WI-FI模块不支持静态配置客户端IP地址和默认网关;
路由器实际上作为路由器+交换机来使用,其交换机上承载了3个以太网:
1. PC机“本地连接”和路由器的LAN之间的以太网1。该以太网用于PC机和路由器的通信;
2. PC机“本地连接”和路由器的WAN之间的以太网2。该以太网用于无线设备发出的包和PC机通信;
3. PC机的PPPoE网卡和局端交换机之间的以太网3。该以太网用于和互联网通信。
对于iPAD过来的数据包,实际上是绕了好大一圈才通过PPPoE封装到达局端的:
1. 数据包到达无线路由器,虽然它的地址属于上述以太网1,但是由于无法配置默认路由使之指向PC机的“本地连接”以太网1的地址,而其必然要通过WAN口发出,因此就引出了以太网2;
2. 数据最终从WAN口发出到达以太网2,由于以太网2的默认网关配置(也就是WAN口的默认网关配置)的是指向PC的“本地连接”的以太网2的对应IP地址,数据最终会到达PC机的“本地连接”;
3. 注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下面 有一个项:IPEnableRouter。该项类似于Linux的net.ipv4.ip_forward协议栈参数。先检查一下该注册表项的值是不是 1,如果不是则改成1。这样Windows机器就可以作为一台路由器使用了,转发其它机器发来的数据包;
4. 由于PC机的默认网关已经是PPPoE上的地址了,也就是说,所有的包都从PPPoE网卡发出,又由于第3个要点,该PC已经启用了IP转发,因此iPAD上发出的访问外网的数据包最终通过PPPoE网卡的封装发出到了以太网3;
5. 以太网3上的数据包进入路由器的LAN口,从另一个LAN口出来,就发往局端了。整个过程中,路由器的3个LAN口都作为一个桥设备存在,要点是,路由器WAN口以及PC机的唯一网卡也加入了这个桥的链路层。根据链路层复用原理,虽然所有的口都和这个桥直连,但是它们却是不属于同一个IP网段的,实际上它们各自独享了一个IP网段。
配置要点:
0. 确保连线是正确的;
1. 确保以太网1的IP地址在一个IP子网内,掩码相同。比如两个地址10.0.0.x/255.255.255.0和10.0.0.y/255.255.255.0就是所谓在一个子网;
2. 确保以太网2的IP地址在一个IP子网;
3. 确保路由器的WAN口的默认网关指向了PC机的“本地连接”上的和路由器的WAN口在同一子网内的IP地址;
4. 确保路由器WAN口的DNS和PC机上PPPoE拨号成功后推送的DNS是一致的。
5. 总之,PPPoE的拨号端和局端不要出现路由,因为这会影响到BT但很小儿科的MAC地址绑定结果(clone mac即可解决),另外很多家用路由器也不允许配置LAN口的路由;
6. 总之,家用路由器不是一台你可以任意操作的Linux或者BSD,你能得到的仅仅是一个有很多配置约束的界面而不是一个shell终端(当然你可以想办法破解之),因此你不能指望在协议栈有什么创举,因为这涉及到很多命令或者编程接口,而这些却都是不开放给你的,要么想办法使用有限的界面配置满足你的要求,要么直接在物理层搞掉它,本文和《小成本对付宽带我世界实现有线/无线同时上网》描述的就是这后一种方法。
绕这么大一圈子,只因WI-FI模块和LAN模块不能配置默认网关,如果能的话就不要WAN口了,当然也就不需要WAN口回绕这种很BT的了。