家庭使用ros拨号上网,内网有多个服务对外提供,之前使用的普通的dnat模式,正常运作,内网使用伪装上网,一切如常。
最近尝试在内网搭建了一套SaaS服务,可能要动态的映射端口出去。虽然可以端口号段的来映射,想来还是整个地址映射更舒适。
增加个网口,外网多拨了一路,现想使用pppoe-out2的外网地址全映射到内网的10.255.255.51服务器。
1.地址映射
前提:
目前有两路外网地址,分别是pppoe-out1和pppoe-out2。
我拨号上没有勾选创建默认路由,之前能上网的原因是我手动在ip-route里面配置了一条通过pppoe-out1的上网路由。
好的,现在开始配置pppoe-out2的映射
配置映射:
chain=dstnat action=dst-nat to-addresses=10.255.255.51 protocol=tcp in-interface=pppoe-out2
log=no log-prefix=""
可以了吗?
有点网络知识感觉,可能知道不行。
想象请求从外网过来,进到pppoe-out2口,路由正确的nat,将目标地址是pppoe-out2的外网地址dnat到10.255.255.51服务器。
服务器收到请求,处理请求,现在服务器要返回数据被源请求者。这个请求者不在服务器服务器一个网段,服务器会发送给自己的默认网关。好吧,我们现在假设请求者ip是1.2.3.4。服务器告诉路由器,来吧,把我这个response给 1.2.3.4这个家伙。路由器怎么处理呢?嗯,路由器也有默认路由,就是我之前配置的pppoe-out1的路由。现在和奇怪了吧。请求从pppoe-out2进来的,路由器又从 pppoe-out1发送了返回,可以工作吗?
应该是不行的哦,因为我们的1.2.3.4请求者,明明是发送给pppoe-out2的外网地址的。所以请求者只会等待out2对应外网地址的返回,out1的显然是不行的。
处理方法:
我们需要尝试区别,哪些流量是从pppoe-out2进来的,给他打标记。然后路由出去的时候,再把这些打了标记的流量从他应该出去的接口
送出去。
;;; 步骤一,将从pppoe-out2进来的链接标记一下(wan2_conn)
chain=prerouting action=mark-connection new-connection-mark=wan2_conn passthrough=yes
connection-state=new connection-mark=no-mark in-interface=pppoe-out2 log=no log-prefix=""
;;; 步骤二,将output chain里面标记为(wan2_conn)的链接,路由表示标记一下(to_wan2)
chain=output action=mark-routing new-routing-mark=to_wan2 passthrough=yes
connection-mark=wan2_conn out-interface=pppoe-out2 log=no log-prefix=""
;;; 步骤二,将prerouting chain里面标记为(wan2_conn)的链接,路由表示标记一下(to_wan2)
chain=prerouting action=mark-routing new-routing-mark=to_wan2 passthrough=yes
connection-mark=wan2_conn in-interface=!pppoe-out2 log=no log-prefix="
步骤二是为了处理路由器直接返回给源端的流量,最好加上。
一切就绪,我们再加一个将标识为 to_wan2的流量进行正确路由的路由条目,就OK了!
大佬
可以请教一个问题嘛
我的ros有二个外网地址
一个做了nat 192.168.83.10 32006
从另一个外网网卡访问这个映射 端口访问不了
但是别的网络或者自身的网络可以访问这个nat映射
你参考我的文章,如果有多个外网地址,由于默认网关的存在,需要给非默认网关流量做好路由标记,让他能从正确的来源网卡回流。
大佬 留个联系方式呗
发邮件把, 这里不好留联系方式, admin#xiaocaicai.com,#换成@
解决了问题,非常感谢