这两天客户提了一个需求,就是用两台路由器把两台设备连接在一起,这样两台设备的ip地址不是同一个网段的,但是要求他们能够互相访问。结果折腾了几天,记录一下折腾的过程。
收到这个要求,第一个反应就是应该使用静态路由,因为这一台设备访问另外一台设备时,必然要通过直接连接的路由器进行转发,直接路由器上为什么会有相关的路由信息呢?当然是要通过静态路由的方法添加了,在网上搜索了一下,大概分为两步,第一步是添加静态路由路径,第二步是添加防火墙对应的转发功能,因为数据包是从wan转到lan的,如此简单,很好办,先在openwrt的network->static routes下面增加一条路由,然后在firewall里增加一条流量转发规则,是从wan forward到lan,支持tcp和udp协议,这样就应该ok了,结果按此操作,运行ping却ping不通,于是开始了折腾,到处调整,好像能ping通了,很高兴,结果一重启,又不行了,折腾了一天多也没有结果,最后仔细理清了思路,总算把问题解决了
先说网络的结构大致如下:
最终的目的是192.168.31.×的设备可以访问192.168.41.×的设备
第一步,先说静态路由,如果静态路由设置对了,在ip route中应该出现对应的路由啊,结果一列表,发现根本没有,这个openwrt是我们工程师自己改的,调整了很多地方,可能把luci相关操作搞乱了,导致无法正常保存route了,这个好办,手工加入就行了,结果再ping还是不行。
第二步,再说防火墙,我明明建立规则为什么还不行?仔细看了一下,支持的转发协议只有tcp和udp.而ping用的是icmp协议,把对应的协议加入到转发区域就可以了,现在实际上普通的应用应该已经正常了,但是不支持ping,因此需要新建一条规则,大部分规则和这条规则都一样,只是支持协议写成icmp就可以了,当然还有一个更偷懒的方法,就是把forward部分全部设成accept,自然所有的数据都可以转发了,但是这样做其实存在一个风险,就是把所有的lan端口都暴露在wan里了,不建议这么做,建立了这条规则以后再ping果然就ping通了
总结一下步骤分为下列几步:
1.建立静态路由,静态路由的地址是网络地址形式,以目前的例子,网络地址是192.168.31.0,然后选择子网掩码,这个例子里是255.255.255.0,然后是网关地址,这里应该填入的是管理对应设备的wan口IP地址.
2.建立转发规则,一个是在wan的区域把规则改成accept,另一个是建立两条traffice规则(流量规则),一条是tcp和udp的,另外一条是icmp的,源选择wan, 目的选择lan.
然后就可以通过静态路由访问对应的设备了