我做了两个实验。这是他们俩的网络:
[private network] [public network]
A -------------------- R ----------------- B
192.168.0.5 192.168.0.1|192.0.2.1 192.0.2.8
Run Code Online (Sandbox Code Playgroud)
一个的默认网关[R 。R有 IPv4 转发活动和以下 iptables 规则:
iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 50000
Run Code Online (Sandbox Code Playgroud)
目的是,来自A 的任何 TCP都将使用R的端口 50000屏蔽为 192.0.2.1 。
我在B上的端口 60000 上使用nc -4l 192.0.2.8 60000.
然后我从A打开了一个连接:nc -4 192.0.2.8 60000
A开始发送如下所示的数据包:
192.168.0.5:53269 -> 192.0.2.8:60000
Run Code Online (Sandbox Code Playgroud)
R将其翻译成
192.0.2.1:50000 -> 192.0.2.8:60000
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好。
然后我试图打开下面的客户端- [R :nc -4 192.0.2.8 60000 …
我的 ISP 授予我一个IPv4 地址和一个 IPv6 前缀,该前缀已细分为几个网络。
+--------------+
| | eth1
| |---------- <IPv6 network>
| |
eth0 | Linux Router | eth2
ISP ----------| |---------- <IPv6 network>
| |
| | eth3
| |---------- <IPv6 network>
+--------------+
Run Code Online (Sandbox Code Playgroud)
碰巧的是,所连接的 IPv6 网络中的一个节点eth1将受益于拥有 IPv4 地址。
看来我希望路由器桥接IPv4 流量并路由IPv6 流量。不?
我听说过代理 ARP,但据我所知,我需要为路由器提供另一个 IPv4 地址,否则它不会尝试与 ISP 的 v4 流量进行交互,对吧?再说一遍,我只有一个 v4 地址。
我认为,普通桥接也不是一种选择,因为那是第 2 层,它无法区分 IPv4 流量和 IPv6 流量之间的区别。如果桥接 IPv4,也会桥接 IPv6,这会破坏当前的 IPv6 设置。
我是否被迫将流量 NAT 到专用网络,并从该网络为节点分配另一个地址?有更直接的选择吗?