起源于这个帖子:
https://www.right.com.cn/forum/thread-5512947-1-1.html
2021-8-29 riverscn
谈论的问题就是 ,到底N1(这样的单网卡设备)做旁路由的时候,
加不加那个 masquerade的规则。
额,还是先问个问题吧,
假设你的旁路由是一个5端口的7620/7621的这样的多网卡路由器,
那么,你要把那根网线插在哪里呢? WAN 还是 LAN ?
嗯,一般人都认为是 LAN 吧,,,
嗯,在N1身上呢,
你认为它的那个网卡是LAN还是WAN呢?
(其实问题的结症就在这里,旁路由是以什么方式 发送/转发来自LAN用户的数据的...)
暂且搁置,,
下面说,旁路由干了什么?
它接受了pc发出的请求数据包,
如果是普通请求,就直接发送给主路由,,,
如果是出海的事情,就自己处理一下,再发给主路由。
(为书写方便,用N1来指代旁路由,pc机指代LAN里的用户)
问题来了,
它发给主路由的数据里,IP地址是什么?
如果做了masquerade,就是N1自己的ip地址(例如 192.168.1.2)?
如果没做masquerade,就是pc机的ip地址(例如 192.168.1.100)?
一、假设是pc的ip地址,那么
当主路由收到外网返回的数据时,根据ip地址知道,这个数据应回到pc,
从而形成一个 pc->N1->主路由->外网 ->主路由->pc的奇怪的不对称的路径。
这种不对称的路径,可能是会有问题的,甚至是不能通的路径。
实测,
ping(ICMP)、nslookup(UDP)可以通达,
但是 http、ftp、email等常见使用TCP的应用,却无法连通。
出现这种不可达的情况,很可能和主路由的arp策略有关。
(因为去程局域网IP包里是pc机的IP,但是包头是N1网卡的mac地址,
这有可能造成某些主路由设备的认知混乱)。
二、假设是N1自己的ip地址,也就是说,
N1对pc发来的数据包做了处理,替换掉其中的源地址为自己的ip地址,
而这个动作就是SNAT,也就是所谓的那个masquerade规则。
这个行为,在一般的家用路由器里,就是LAN-WAN做的转换行为,
所以这种情况下,N1的网卡变成了WAN的角色,将数据发给主路由。
当主路由收到外网返回的数据时,根据ip地址,将其发给N1,
N1再做DNAT,将数据转化为转发给LAN内pc的数据,并从网卡发出。
这个是一个完整且有序的过程,此时,数据路径是
pc->N1->主路由->外网 ->主路由->N1->pc
是畅通的。
也就是说,N1的网卡,即要是WAN的角色,又要是LAN的角色
但它只有一个LAN上的IP地址,
并不同于我们平常意义上的WAN-LAN路由器,
而这个切换LAN/WAN动作可以用masquerade的规则来模拟。
这样,
虽然去往主路由的数据还是LAN内pc的请求数据,
但是在主路由看来,它是来自于N1的数据,
mac地址和ip地址也是匹配的,没有混乱的。
它的ip地址就是N1,它的回程数据也将发给N1去处理,
这是一个合理的,闭环的数据流向。
因此,
所谓旁路由,
其实更应该称为代理服务器,
因为它进入和出去的数据,ip地址都是同一个LAN里的。
虽然它对来自pc的请求数据做了masquerade的转换,
看起来是一个路由器常做的动作...^_^
========================
以上仅为小弟一家之言,
不对的地方请各位指正,
兄弟们一同思考、进步。