我有一个有趣的问题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 地址。确保您拥有良好的防火墙,并了解您允许的流量。