什么时候才需要进行 NAT?

NAT(Network Address Translate) 在我们日常网络中太常见了,今天重新仔细审视 NAT,我想到了一些东西

什么时候要进行 NAT?-> 下面的话取反,则是需要 NAT 的时候 /doge

当需要通信的双方路由器之间,互相完全掌握所有的主机地址的路由的时候,NAT 是不必要的

如果两个 Router 之间用 BGP 建邻了,那么大部分内网地址的路由,双方都是知道的,在两个路由器之后的主机相互通信,并不需要进行 NAT,直接 src.address 填源主机地址,通信没有障碍。

但是有些时候,我们的 Router A 有一个 VPN 接口,但这个接口的地址和对端用来通信的地址,Router B 都是不知道的,那么这个时候,没有进行 NAT 的话,在 Router B 想要回包的时候,因为找不到对应的路由,并不能回复这个包,于是 drop 了,网络不可达:(

那么对于以上情况我们有两种处理方法:

  1. 在 Router A 上添加 srcNAT, masquerade 这个 VPN 接口,那么在发送 VPN 客户端主机想要发送报文给 Router B 后的主机时,会把 src.address 替换成 Router A 的地址 (Router B 认识的那个),这样的话 Router B 就可以回包给 Router A,在 Router A 重新收到这个包的时候,把 dst.address 换回客户端主机的地址,网络就可达了✌
  2. 在 Router A 上添加 BGP 的 network ,添加 VPN 网络,那么不需要 NAT 也行,或者直接在 Router B 上加静态路由

未命名绘图.drawio.png

NAT 带来了很多好处:

  1. 节省了 IP 地址空间,大家都可以用 RFC 中规定的保留地址,在和外部网络交流的时候 NAT 成外部 IP
  2. 增强了网络的安全性和隐私性,我们可以把网络中的主机藏在防火墙的 NAT 之后

也有缺点:

  1. 在需要 NAT 时增加了转发报文的开销,需要对报文首部进行处理
  2. 在没有 UPNP 的情况下,NAT 会很怪
  3. 需要维护

在我遇到的问题中,Openwrt 有时候并没有和 RouterA (那个管理隧道的 Router )在同一网段,也没有建立 BGP ,没有直连路由,所以我的方法是,直接在 Linux Host 中添加了内网路由,路由到 RouterA 上。

CentOS7 添加路由

1
ip route add x.x.x.x/x via <gateway>

重启之后上面这条会失效,所以,要加个开机之后会运行的脚本

1
2
3
vi /etc/sysconfig/network-scripts/route-eth0
x.x.x.x/x via <gateway>
:wq

百度

今天被朋友推了一个规则 中文文案排版指北

然后我就开始改我的博客了

是可以用正则匹配替换的,但是确实还有一定难度 /doge

所以我就直接手工替换,养成好习惯,同时还能审查一遍

有了 k8s 之后….

微信截图_20220323020847.png