需求1
内网用户,无论其在IE地址栏内输入任何网址,都被系统强制跳转到路由器主页(192.168.1.1)
解决办法:
iptables -t nat -A PREROUTING -p tcp -m multiport --dport 80,8080 -j DNAT --to 192.168.1.1:80
这样不管在浏览器里面打入什么地址都自动显示192.168.1.1的首页。
缺陷1
这种方案对路由器可以上网没有问题,但是当路由器没有上网时,就会失效。
彼时,用户在PC上敲击网址后,首先进行DNS查询,由于网络不通,DNS必然失败,从而导致PC压根就不会
发送HTTP的报文出去。这样,就不存在数据的重定向。
补充方案:一种可行的方案是,在没有上网时,通过DNS欺骗来达到重定向的目的。不过这样需要修改DNS的源码。
缺陷2
如果网页的上指定了特殊的端口,也会失效。
虽然我们使用了多端口,但是仅限于80或者8080(也可以更多),但是无法穷举所有的用例,所以还是存在这种风险。
需求2
外网用户可以访问WEBUI,也就是常说的通过GUI进行远程管理。
最初的想法是通过httpd来绑定外网地址和网口,但是每次联网需要重启httpd;不是一个很好的体验。
最近仔细研究了一下iptables,觉的完全可以通过PREROUTING链的DNAT实现类似的功能即可。代码如下:
iptables -t nat -A PREROUTING -p tcp -i ppp0 -m multiport --dport 80,8080 -j DNAT --to-destination 192.168.1.1:80
效果如下:
root# iptables -t nat -L PREROUTING -n -v
Chain PREROUTING (policy ACCEPT 2155 packets, 289K bytes)
pkts bytes target prot opt in out source destination
0 0 DNAT tcp -- ppp0 * 0.0.0.0/0 0.0.0.0/0 multiport dports 80,8080 to:192.168.1.1:80
iptables -t nat -A PREROUTING -p tcp -d <your wan ip address> -m multiport --dport 80,8080 -j DNAT --to-destination 192.168.1.1:80