接上文

本文适用于:路由器无法刷第三方ROM,但局域网中存在任意一台*nix设备时的使用方法

原理

原理是更改所需的目标地址的默认网关,改为在*nix设备上进行转发,从而在任意的普通设备(主要指Windows系统设备及其它无法运行iptables的设备)上达到最简化配置甚至零配置的效果。

先看下物理层拓扑:

436919cbgw1etpme9da2vj20ah05yt8t

这是网络层拓扑(IP):

436919cbgw1etpmirhs77j20ah05y3yq

简要地来说,主要是两处操作(以请求74.125.224.55:443为例):

  1. 想办法更改普通设备(即图中任意设备)的路由表,使请求74.125.224.55:443的数据包发往局域网中的*nix设备
  2. *nix设备进行目标地址转换,将数据包发往66.66.66.66:44300;并在拿到响应后进行源地址转换,返回给目标设备

步骤

  1. 在普通设备上写入前文使用的hosts
  2. 由于希望实现接入局域网的普通设备的零配置,在路由器上设置静态路由。假设路由器的地址为1.1.1.1,*nix设备的地址为1.1.1.10;以TP-LINK的经典配置界面为例,在路由功能静态路由表中添加一项:
    436919cbgw1etpmtiqqkuj20ji06cwft
  3. 在*nix设备上执行:

备注

由于普通设备的默认网关为路由器(1.1.1.1),在路由器上设置了静态路由后,普通设备在请求目标74.125.224.55时,会先收到路由器的一个ICMP redirect (redirect for host)包,普通设备上的操作系统因此更新路由表,将请求发往新的网关(1.1.1.50)。但是由于收到ICMP包在尝试建立连接之后,而上一次建立连接是通过默认网关(1.1.1.1)进行的,被墙,因此普通设备会经历一次连接超时(或者reset)。

如果需要减少这种错误,可以在普通设备上设置路由表,以Windows为例,在管理员权限下执行:

metric可以为任意值,但应尽量小,这样操作系统才会得到这是一条最优路由的结果而去使用它