首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SNAT到不可路由接口

SNAT到不可路由接口
EN

Unix & Linux用户
提问于 2017-06-19 11:57:41
回答 1查看 1.2K关注 0票数 1

我在默认名称空间和另一个命名空间RoutableNS之间设置了一个虚拟以太网对,如下所示:

代码语言:javascript
复制
--------------              --------------
-   veth0    - --------------    veth1   -
-  10.5.1.1  -              -  10.5.1.2  -
--------------              --------------
  default NS                 RoutableNS

我可以通过接口RoutableNS在命名空间veth1中切换外部世界,但是当SNAT (或伪装)传入流量达到10.5.1.1 (或10.5.1.2)时,veth接口将什么也不会出现。

我对tun设备也做了同样的尝试,我发现在IP不能向外部世界路由时(在默认名称空间中),不可能伪装成tun设备。

所以我有两个问题:

  1. SNAT (化妆舞会)的这种行为在某个地方有记载吗?我指的是,在当前命名空间中,新的源in应该可以路由到外部世界的行为。
  2. 是否有一个网络选项(sysctls)允许我这样做?
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2017-06-21 16:45:05

这是完全可能的伪装或SNAT的设备,其IP是不可路由的外部世界。是否在网络名称空间中也没有什么区别。

您很方便地忘记告诉我们您到底尝试了什么,但是请记住,SNAT和假冒伪劣仅在POSTROUTING表中工作(而DNAT只在PREROUTING表中工作),这一事实已经有了很好的文档说明,您不能避免在iptable命令中明确地提到这个事实。

这意味着SNAT将发生在数据包离开接口之前的最后一步,而DNAT将作为数据包从外部进入接口的非常早期的步骤发生。

所以通常的设置是路由器(主机或名称空间) NATs in从一边传入,到另一边的所有东西:

代码语言:javascript
复制
                +---------------+
                |               |
masq'ed IP --<--| eth0     eth1 |--<-- original IP
10.0.0.99       |               |      10.0.0.1
                +---------------+
                Host or Namespace

您需要相应的DNAT来处理传入连接,因此:

代码语言:javascript
复制
iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.1/32  -j SNAT --to 10.0.0.99
iptables -t nat -A PREROUTING  -i eth0 -d 10.0.0.99/32 -j DNAT --to 10.0.0.1

您并没有确切地说明您想要将什么is伪装成什么is,但是如果您的主名称空间充当这样一个路由器,并且您希望将"RouteableNS“(即10.5.1.2 )掩蔽到外部世界,那么通过使用主命名空间的传出if就可以做到这一点。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/371963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档