OpenVPN IPV6 隧道 Radvd

OpenVPN IPV6 隧道 Radvd

我有一个有趣的问题IPv6 + OpenVPN..

我的版本是OpenVPN 2.1.1

我获得了 2 个原生 /64 ipv6 网络

块 1 -> 2a01:abc:123:deac::/64

块2->2a01:abc:123:dead::/64

网关 -> 2a01:abc:123:deaf::1/59)*我无法控制这个*

计划是/是通过 openvpn 将此“Block2”路由到办公室(用于测试目的)

所以解释一下..

我有一个 Centos Box 作为数据中心中的第一个 Linux “路由器”,还有一个 Ubuntu Box 作为办公室中的第二个 Linux “路由器”,我使用 tun 创建了一个简单的点对点隧道(基于 ipv4 地址来启动隧道)

我已经分配给Centos

ip addr add 2a01:abc:123:dead::1/64 dev eth0
ip addr add fed0::2/128 dev tun0

ip route add 2a01:abc:123:dead::/64 dev tun0  ## ipv6 Block2 down the tunnel
ip route add ::/0 via 2a01:abc:123:deaf::1 dev eth0 ## Default out to Gateway

我已经分配给Ubuntu

ip addr add fed0::3/128 dev tun0
ip addr add 2a01:abc:123:dead::2/64 dev eth0

ip route add ::/0 via 2a01:abc:123:deaf::1 dev tun0 ## Default up the tunnel

我也在两台服务器上包含了..

sysctl -w net.inet6.ip6.forwarding=1

看起来不错...对吧???错.. :(

我无法从 Ubuntu-eth0 ping 网关或 2a01:abc:123:dead::1

我能够从 Centos Box 上的任何 ipv6 接口访问互联网,但显然不能从 Ubuntu box 访问。

此外,我最终将在 Ubuntu 盒子 eth0 上运行 radvd,并使用 ipv6 地址自动配置网络

谁能给我一些建议/提示来帮助我..???

干杯

答案1

您的问题确实让我很感兴趣,因为我可能会在我管理的另一个网络中使用同样的解决方案。我试验过了,确实可行!(我就是喜欢 Linux...)。

我创建了一个网络工具包模拟您情况的实验室。您可以下载实验室这里(1.8KiB)。

如果您不想在您的机器上测试 Netkit,则无需安装它。您可以直接获取上面的软件包并查看各种机器的 .startup 文件。如果您想测试实验室,它需要一个安装了“radvd”的文件系统,而这不包含在 Netkit 的标准文件系统中。查看文件系统包的 README 以了解如何将其安装到您的机器中,然后使用apt-get update && apt-get install radvd

实验室包含 6 台机器:v6站点(您想要访问的某个 V6 网站),虚拟专用网络(您的 ISP),r1(您的第一台具有 V4 和 V6 连接能力的路由器),r2(连接到r1通过 OpenVPN)pc1电脑2(通过以下方式连接并提供 IPv6 服务的计算机r2)。

我用的是RFC 3849示例中的文档前缀 2001:DB8::/32,而不是您使用的随机示例地址。此外,我为 OpenVPN 端点使用了 FEC0::/96,这已经过时了。在您的部署中,建议您使用来自您的唯一本地地址反而。


澄清: RFC 3849定义前缀 2001:DB8::/32 以用于示例和文档目的(用于全局单播)。我们鼓励人们不要选择任何随机的 IPv6 地址,而是在示例中使用 2001:DB8::/32 前缀中的地址作为通配符,这些地址将在实际部署中更改为其他地址。在这个问题中,首先是 2001:acb:132:acb::/64,然后是 2001:123:123:11a1::/64。在答案中,我只是将这两个地址都替换为文档前缀中的地址。当您将答案应用于您的实际场景时,只需查找每个出现的 2001:DB8:: 地址并将其替换为您的实际地址。

隧道端点也需要地址。隧道端点中使用的地址不需要外部可路由,因为它们仅在内部使用。您使用了以 FED1:: 和 FED2:: 开头的地址,而我使用了以 FECO:: 开头的地址。这些地址最初是在RFC 3513。它们相当于 IPv4 的私有地址 10.0.0.0/8、192.168.0.0/16 和 172.16.0.0/12。由于存在问题,它们后来在RFC 3879支持唯一本地地址(ULA)RFC 4193。ULA 具有针对每个最终用户唯一的“随机”前缀。其好处是,如果您出于任何原因在这些网络之间路由(例如使用隧道),它们将能够在无需地址转换的情况下相互通信(而使用 192.168.0.0/16 时可能会发生冲突,并且确实会发生冲突)。此说明之前链接的页面将帮助您创建自己的 ULA 前缀(并可能注册它,但无需注册)。

在隧道端点使用站点本地地址(如 FECx 或 FEDx)并没有真正的问题。它们已被弃用,但这并不意味着它们是错误的。只是建议使用 ULA。


全面的您的第一个路由器的配置(r1) 如下。请关注评论以获得更好的理解。

# Enable forwarding for IPv6 (between eth0 <-> tun0)
sysctl -w net.ipv6.conf.all.forwarding=1

## ISP V6 Internal network
# Since there is no host specific address, we pick an address in the /64
# prefix. Note that this address is the same in two different prefixes:
# ..11a1::/64 and ..11a0::/59. This requires a proxing hack in R2.
# Optimally, you would have an address in the /59 prefix to use here,
# outside the delegated /64 prefix.
ip link set eth0 up
ip addr add 2001:db8:1:11a1::1/59 dev eth0
ip route add default via 2001:db8:1:11a0::1 dev eth0

## V4 Internet
ip link set eth1 up
ip addr add 192.168.1.1/24 dev eth1

## OpenVPN tunnel via IPv4 Internet to R2
# This is the most basic configuration of OpenVPN. No encryption, no security,
# no nothing. DO NOT USE THIS OUTSIDE THIS LABORATORY.
openvpn --dev tun --tun-ipv6 --daemon

while ! ip link show tun0 2>/dev/null
do
    echo "Waiting for OpenVPN to connect..."
    sleep 1
done

# Configure OpenVPN endpoints. Choose a distinct small prefix for the endpoints
# and use it to route the the /64 prefix to R2.
ip link set tun0 up
ip addr add fec0::1/96 dev tun0
ip route add 2001:db8:1:11a1::/64 via fec0::2 dev tun0

全面的第二台路由器的配置(r2):

# Enable forwarding for IPv6 (between eth0 <-> tun0)
sysctl -w net.ipv6.conf.all.forwarding=1

## Internal Company IPv6 Network
# The router address is arbitrary.
ip link set eth0 up
ip addr add 2001:db8:1:11a1::ffff/64 dev eth0

## V4 Internet
ip link set eth1 up
ip addr add 192.168.1.2/24 dev eth1

## OpenVPN tunnel via IPv4 Internet to R1
# This is the most basic configuration of OpenVPN. No encryption, no security,
# no nothing. DO NOT USE THIS OUTSIDE THIS LABORATORY.
openvpn --remote 192.168.1.1 --dev tun --tun-ipv6 --daemon

# Wait for OpenVPN...
while ! ip link show tun0 2>/dev/null
do
    echo "Waiting for OpenVPN to connect..."
    sleep 1
done

# Configure OpenVPN endpoints. See comments for R1 above.
# Note that we route ALL IPv6 traffic through the tunnel.
ip link set tun0 up
ip addr add fec0::2/96 dev tun0
ip route add default via fec0::1 dev tun0

# R1 address is in our private network (eth0, see above), but on the other
# side of the tunnel. We need a more specific route specifically for it.
# Also, make this router (R2) act as a neighbor proxy so that other
# machines on the private network can see R1 through the tunnel.
# This is a hack that would be avoided if we had a bigger prefix than
# /64, or if R1 had a host-specific address outside of the /64.
ip route add 2001:db8:1:11a1::1/128 via fec0::1 dev tun0
ip neigh add proxy 2001:db8:1:11a1::1 dev eth0

## Routing advertisement daemon
# NOTE: The standard Netkit filesystem does not have radvd, it has to be
# installed manually with `apt-get update && apt-get install radvd` in
# the model fs.
chmod 644 /etc/radvd.conf
radvd

连接到的 PC 的配置r1(eth0)非常简单,这要归功于 radvd:

sysctl -w net.ipv6.conf.all.autoconf=1
ip link set eth0 up

这是最重要的配置。其他详细信息(包括r2的 /etc/radvd.conf) 位于上面的实验室包中。

答案2

要求您的隧道代理分配 /56 或 /48,至少另一个 /64。然后,您将能够在此块中为链路的远端生成一个 /64。如果您有多个隧道,则每个隧道都需要一个单独的 /64。

我希望 FED1 地址始终只位于 TUN 设备上。(站点本地地址已弃用,不应使用。)您可能必须在 Ubuntu 端指定 ::0/0 的路由。对 Ubuntu eth0 接口使用 2001: 或 FED1:x: 地址。RADV 应该会自动获取地址,但我对其进行了编程。

我的配置使用 /48 分配作为 LAN 设备,使用 /64 作为 DMZ 地址。由于它们处于不重叠的范围内,因此防火墙配置更加容易。

您的 ping 结果符合我的预期。您需要在 Ubuntu 上指定指向 FED1::1 的链接。将 Centos eth0 地址更改为 FED1:1::1 并将地址指定为 /32s 或 /64s 应该会有所帮助。您只需要知道隧道末端的链接地址。eth0 接口应该有您的 2001:(公共地址)。

如果 Centos 上的 eth0 是您的上游链路,则它可能具有上游链路本地端的点对点 IPv6 地址。这应该由您的 6to4 隧道设置处理,该设置还应添加通向 Internet 的默认路由。

编辑:建议的配置

Centos(服务器/网络)

ip -6 添加 fe81::1/64 dev tun0
ip -6 添加 2001:acb:132:acb::1/64 dev eth0
ip -6 通过 fe81::2 dev tun0 添加路由(新 /64 分配)

Ubuntu(隧道上的客户端)

通过/etc/network/interfaces

自动调谐0
iface tun0 静态
    地址 fe81::2
    网络掩码 64
    网关 fed1::1

自动 eth0 iface eth0 静态 地址(新的 /64 分配)::1 网络掩码 64

或者手动(你可能想在 VPN 启动脚本中处理 tun0),但我会使用 /etc/network/interfaces 配置 eth0

ip -6 添加 fe81::2/64 dev tun0 ip -6 添加(新/64)::1/64 dev eth0 ip -6 通过 fe81::1 dev tun0 添加默认路由

radvd使用 eth0(LAN)接口在主机上设置默认 ipv6 路由。tun0 路由是手动完成的。

警告:一旦您完成此操作,您的所有 IPv6 计算机都将拥有可路由的 Internet 地址。确保您拥有良好的防火墙,并了解您允许的流量。

相关内容