- 主题:请教一下,DNAT之后回程路由
感谢,思路清晰,学习了。
果然我还是知其然不知所以然,大佬说了一下就明白了。
不过我的实际情况有一个小问题,A到B走的是公网。所以A上没办法做静态路由指向B。
【 在 tsa300 (Tele-Superachromat T*) 的大作中提到: 】
: 静态路由效率高。
: DNAT SNAT 端口转发肯定不如路由。
: 其实你不需要iptables DNAT,A做静态路由,把C网段的路由指向B,B做源地址路由(策略路由)把A来的请求指向C。这是三层转发(路由),能访问C的任何端口、任何协议,而且性能好。如果用iptables 做DNAT端口转发就是四层的,只能每个端口+协议的组合单独配置,性能也打折
: 回程最简单是B开 masquerade,C看到的是B发来的请求回给B,B的masquerade机制回给A,iptables的masquerade本质是SNAT四层转发。
: 如果能在C上配静态路由就更好了,直接把A的网段指向B,B知道C在哪儿,不需要四层转发了,B什么都不用做回程就通了。
--
修改:hyoga FROM 210.162.8.*
FROM 210.162.8.*
你的意思是 B 的 ip 不固定?可以申请个域名,B配上ddns,A定期去解析一下。
剩下的就简单了,比如c的网段是 10.10.10.0/24 ,你在A做个静态路由,
ip route add 10.10.10.0/24 via IP-addr-of-B
【 在 hyoga 的大作中提到: 】
: 感谢,思路清晰,学习了。
: 果然我还是知其然不知所以然,大佬说了一下就明白了。
: 不过我的实际情况有一个小问题,A到B走的是公网。所以A上没办法做静态路由指向B。
: ...................
--
FROM 123.126.43.*
关键别人进来的时候做了DNAT,只做路由,A收到的包是C的源地址,A发出去的包又是B的地址,socket能建立起来?只有方案1可行吧
【 在 tsa300 的大作中提到: 】
: 静态路由效率高。
: DNAT SNAT 端口转发肯定不如路由。
: 其实你不需要iptables DNAT,A做静态路由,把C网段的路由指向B,B做源地址路由(策略路由)把A来的请求指向C。这是三层转发(路由),能访问C的任何端口、任何协议,而且性能好。如果用iptables 做DNAT端口转发就是四层的,只能每个端口+协议的组合单独配置,性能也打折扣。
: ...................
--
FROM 112.64.184.*
按理说不应该出现源、目的地址不匹配的情况,所以你的环境还是没描述清楚,你ABC之间具体是什么情况?
正常来说,A->B和B->C应该有各有一条类似隧道的链路,AB都有私网地址,隧道当然可以建在公网上。
这样的话,路由或四层转发都可以,而且可以一个方向路由、另一个方向四层转发,只要不出现你说的那种源、目的错乱就可以了。
如果A和B都只有公网地址,没任何形式的隧道,那就没办法用路由的方式,必须做4层的转发,A发给B,B把A->B的包换成B->C发出去,回程再换一遍,AB之间所有包全程都在公网上跑。
但是这种情况下不会涉及C该不该设静态路由去A啊,因为C不会收到A发来的包(源、目的都被B替换了),不可能回给A,只会回包给B啊。
【 在 freyoneby 的大作中提到: 】
: 关键别人进来的时候做了DNAT,只做路由,A收到的包是C的源地址,A发出去的包又是B的地址,socket能建立起来?只有方案1可行吧
--
FROM 123.126.43.*
啊……我从来没有想过可以这样做路由!!!又学习了。
第一反应是我怎么能用公网IP转发到另外一个内网的访问呢?
是我愚钝了。
其实不需要区分内网还是外网IP的
【 在 tsa300 (Tele-Superachromat T*) 的大作中提到: 】
: 你的意思是 B 的 ip 不固定?可以申请个域名,B配上ddns,A定期去解析一下。
: 剩下的就简单了,比如c的网段是 10.10.10.0/24 ,你在A做个静态路由,
: ip route add 10.10.10.0/24 via IP-addr-of-B
: ...................
--
FROM 210.162.8.*
前提是你A和B之间有隧道
如果A和B只有公网,那只能通过B做4层转发 (DNAT SNAT),这时那条路由就没用了,因为AB公网是走default route出去的,你在A配一个去C via B 的静态路由,而A到B只能通过defualt route才可达是没戏的。
ip route add xxx/y via zzz
via 后面那个地址必须是本机直接可达的地址。
【 在 hyoga 的大作中提到: 】
: 啊……我从来没有想过可以这样做路由!!!又学习了。
: 第一反应是我怎么能用公网IP转发到另外一个内网的访问呢?
: 是我愚钝了。
: ...................
--
FROM 123.126.43.*
同意
【 在 tsa300 (Tele-Superachromat T*) 的大作中提到: 】
: 前提是你A和B之间有隧道
: 如果A和B只有公网,那只能通过B做4层转发 (DNAT SNAT),这时那条路由就没用了,因为AB公网是走default route出去的,你在A配一个去C via B 的静态路由,而A到B只能通过defualt route才可达是没戏的。
: ip route add xxx/y via zzz
: ...................
--
FROM 220.191.249.*
你这个需要一个proxy,不是需要一个nat.
【 在 hyoga (白鸟·没见过猪跑,还没吃过猪肉吗?) 的大作中提到: 】
: 大佬,莫取笑俺。
: 说直白点就是A在外面想临时访问C的资源,但是C限定了只能从B访问。
--
FROM 103.107.217.*
明白。多谢!
【 在 tsa300 (Tele-Superachromat T*) 的大作中提到: 】
: 前提是你A和B之间有隧道
: 如果A和B只有公网,那只能通过B做4层转发 (DNAT SNAT),这时那条路由就没用了,因为AB公网是走default route出去的,你在A配一个去C via B 的静态路由,而A到B只能通过defualt route才可达是没戏的。
: ip route add xxx/y via zzz
: ...................
--
FROM 210.162.8.*
proxy当然可以,但是很显然nat比proxy简单多了不是吗?
【 在 Loveni (ainibaobei) 的大作中提到: 】
: 你这个需要一个proxy,不是需要一个nat.
--
FROM 210.162.8.*