DN42 - 一个大型的 VPN 网络

简介

DN42 是一个大型的 VPN 网络,通过 GRE, OpenVPN, Tinc, IPsec 等隧道将不同地区的用户连接在一起,同时使用 BGP 协议宣告自己的网段,实现用户之间的互联互通。

DN42 有一套完整的 AS 号的申请、IP 地址块的申请以及 .dn42 域名的申请系统,IP 地址块的分配不会于公网上的产生冲突,因为使用的是 172.20.0.0/14 以及 fd00::/8 这些私网地址。

那么,在 DN42 中我们能玩些什么呢?

路由协议

正如上面所说,DN42 使用 BGP 协议来让各个用户宣告自己的网段,从而实现用户之间的互联互通,因此 BGP 协议是十分重要的一个环节。当前 DN42 大概有 300 多个 AS 在线,有大概 580 条路由,应该足够我们进行研究的了。

在我实际的操作中,使用到了 iBGP 、 eBGP 以及路由反射器,相信在以后进一步深入的话还会学习到很多好玩的东西,例如 Anycast 。

可能你会想说,eNSP 和 Cisco Packet Tracer 也同样可以做到类似的模拟,事实上的确如此,但是,有什么比在实际的网络上进行操作更加有趣的呢?而且,你不必成为 APNIC 的会员就可以拿到 AS 号,也不用交纳年费来买一个 IP 地址块,同时,也不用怕弄坏了实际的网络然后被上级责备。

连接到 Hacker Spaces

如今没有多少人有公网 IP ,就连宽带也逐渐开始分配 100.64.0.0/16 的 IP 地址,如果我们家里有一台树莓派什么的想要在外面访问,将自己的路由器加入到 DN42 也是一个不错的选择。我们可以随时随地连接上 DN42 网络,然后可以访问到自己的树莓派,也可以用树莓派给其他人提供各种各样的服务。

说人话就是,DN42 在一定程度上解决了 NAT 设备的访问问题,如果有担心安全问题的话,也可以设置一些访问控制进行访问的过滤。

加入 DN42 网络

请参考官方的入门文档:https://dn42.net/howto/Getting-started

体验

大概一个星期之前我就拿着我的几台吃灰 VPS 入了坑,在 http://io.nixnodes.net/ 中注册了一个 AS 号:4242421888 ,然后 ALLOCATED 了几个 IP 段给这几台不同地区的 VPS 使用。

一切就绪之后,我在 https://dn42.us/peers 中联系到了 Chris Moons ,通过和他做 peer ,我成功地将自己的 VPS 连接到了 DN42 网络中。

不得不说,DN42 和真实的互联网真的很相似。

BGP

我目前使用的是 Bird 作为 BGP 宣告工具,之前是使用 Quagga 的,但是他对 IPv6 协议上不是很支持,在我的操作中遇到了不少问题,虽然他的使用方法很像是在操作 Cisco 设备,但是后来我还是把他撤掉换成了 Bird

Bird 的语法虽然不像 Quagga 那样有 Cisco 设备操作经验就可以上手,但是他的配置及其简单明了。

如果想要了解的话可以去 DN42 的 Wiki 了解:https://dn42.net/howto/Bird

下面是我在 Bird 中运行 show protocols all chrismoos 的结果

Preference:     100
  Input filter:   (unnamed)
  Output filter:  (unnamed)
  Import limit:   10000
    Action:       block
  Routes:         468 imported, 0 filtered, 560 exported, 16 preferred
  Route change stats:     received   rejected   filtered    ignored   accepted
    Import updates:        4657978          0      46297    1252694    3358987
    Import withdraws:        14184          0        ---      43809       7162
    Export updates:        9025262     284456          0        ---    8740806
    Export withdraws:         9173        ---        ---        ---     275578
  BGP state:          Established
    Neighbor address: 172.20.162.86
    Neighbor AS:      4242421588
    Neighbor ID:      172.20.16.133
    Neighbor caps:    refresh AS4
    Session:          external AS4
    Source address:   172.22.68.1
    Route limit:      468/10000
    Hold timer:       179/240
    Keepalive timer:  46/80

DNS

DN42 不仅仅实现了域名的注册,也实现了根域名服务器以及下面的分级域名服务器

下面是反向查询我的一个 ip 地址,可以看出他和我们的实际网络上的 DNS 查询是十分相似的

root@cn-can01:~# dig @172.23.0.53 -x 172.22.68.8 +trace

; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> @172.23.0.53 -x 172.22.68.8 +trace
; (1 server found)
;; global options: +cmd
.                       67      IN      NS      t.root-servers.dn42.
.                       67      IN      NS      a.root-servers.dn42.
.                       67      IN      NS      x.root-servers.dn42.
.                       67      IN      NS      m.root-servers.dn42.
;; Received 225 bytes from 172.23.0.53#53(172.23.0.53) in 1628 ms

22.172.in-addr.arpa.    7200    IN      NS      x.in-addr-servers.dn42.
22.172.in-addr.arpa.    7200    IN      NS      m.in-addr-servers.dn42.
22.172.in-addr.arpa.    7200    IN      NS      c.in-addr-servers.dn42.
;; Received 121 bytes from 172.23.67.67#53(m.root-servers.dn42) in 1319 ms

68.22.172.in-addr.arpa. 7200    IN      NS      d.dn42-servers.dn42.
68.22.172.in-addr.arpa. 7200    IN      NS      x.dn42-servers.dn42.
;; Received 162 bytes from 172.23.67.53#53(m.in-addr-servers.dn42) in 1059 ms

8.68.22.172.in-addr.arpa. 7200  IN      CNAME   8.0/27.68.22.172.in-addr.arpa.
0/27.68.22.172.in-addr.arpa. 7200 IN    NS      ns2.imlonghao.dn42.
0/27.68.22.172.in-addr.arpa. 7200 IN    NS      ns1.imlonghao.dn42.
;; Received 124 bytes from fdea:a15a:77b9:4444::3#53(x.dn42-servers.dn42) in 349 ms

Peers

最后,如果你想加入的话,可以联系我,也可以去到 dn42@hackint 这个 IRC 频道寻求帮助