用iptables实现网页重定向

来源:互联网 发布:天津好吃的地方知乎 编辑:程序博客网 时间:2024/05/22 07:41


需求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 -vChain 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


原创粉丝点击