Document
分享一个点对点隧道软件:vpncloud

分享一个点对点隧道软件:vpncloud

官方已发布version 2.x的版本,建议使用最新版本。本文配置已改为2.x的版本。 Linux下的隧道(打洞)软件非常多,大部分隧道软件建立成功之后,是创建了类似C/S架构的点对点的通信,也就是会有服务器和客户端的区别,下个设备再进来,也一样这样创建。 如果你需要创建类似zerotier

Related articles

bed_reader Set up and use iCloud Photos Shoes That Make You Taller (Ranked By Height) Best Free Cloud Storage Services of 2024 (Up to 20 GB) ASUS TUF Gaming AX3000 V2 review: A good mid-range router

官方已发布version 2.x的版本,建议使用最新版本。本文配置已改为2.x的版本。

Linux下的隧道(打洞)软件非常多,大部分隧道软件建立成功之后,是创建了类似C/S架构的点对点的通信,也就是会有服务器和客户端的区别,下个设备再进来,也一样这样创建。

如果你需要创建类似zerotier这样的虚拟局域网,那么你就应该看看这个隧道软件,它是开源的,名字叫做vpncloud。

功能和优点,文档之类的,你们直接去看官网的说明好了:https://vpncloud.ddswd.de

它的原理跟MPLS、VXLAN差不多,vpncloud也是通过源MAC地址学习,将虚机的MAC和VTEP的IP地址关联,理论上也能支持多播(multicast),但是官方并没有特别说明多播,你得自己多测试一下。那么对我来说,MPLS、VXLAN、VPNCLOUD他们最大的优点是去中心化(decentralize)的虚拟组网,多个设备接入后,可以互相通信而不需要经过所谓的主服务器节点,这样就能符合虚拟局域网的需求。

有中心节点的隧道技术有:pptp、gre、ipsec/ike、gre over ipsec、ipip、openvpn、l2tp、wireguard、ocserv等等

去中心化节点的隧道技术有:n2n、zerotier、zeronet、vpncloud、tinc-vpn、freelan、nebula

——————– 分割线 ——————–

我已经在我的生产环境中用了接近两年,非常稳定。我需要把我的几个服务器/vps放在一个子网内,以规避一些问题。

比如我有一个应用场景是这样:

在公司有一个机柜,里面放着许多网络设备,有nas、voip、打印机、监控摄像等,但tm没有公网IP,在网关做端口映射毫无意义,只能接入虚拟局域网

然后在我家里,也有若干的设备,有时候也在家里办公,需要时时到公司的网段弄点什么东西的。

这时候我只需要把公司和家里连到一个局域网内,再做个路由表,我就可以把公司和家里的所有设备都能组在一起

——————– 分割线 ——————–

另外一个场景是web应用

我有一个用gitea搭建的服务,服务器放在公司机柜,没有公网IP。。。所以我把它加入到虚拟局域网

然后我用的阿里云国内ecs,也加入到虚拟局域网了。gitea我们用的时候除了需要用到https,也需要ssh这种方式,所以这时候就可以直接端口转发到这个隧道IP上

——————–——————– 大分割线 ——————–——————–

说了那么多,直接分享安装步骤吧

我平时只玩ubuntu,所以其他发行版你们有兴趣自己折腾,官网也有说明。其实也可以直接去github下载对应的cpu架构下的二进制包,也很简单。

ubuntu就简单了。直接apt安装即可。

$ wget https://github.com/dswd/vpncloud/releases/download/v2.2.0/vpncloud_2.2.0_amd64.deb
$ sudo dpkg -i vpncloud_2.2.0_amd64.deb

然后配置隧道,进入/etc/vpncloud/路径,里面有一个示例文件,单独创建一个,然后编辑

$ cd /etc/vpncloud
$ sudo touch private.net
$ sudo vim private.net

private.net的内容如下,我的环境里面有两台peers长期运行,用于维持源mac地址学习

listen: 3210

peers:
– 202.175.123.1:3210 #10.192.0.1
– 140.238.220.31:8080 #10.192.0.2

crypto:
password: “eTBK6A37u9NUYQ4GPWpQSdNj4zsjcWMG” #自己生成一段密码
algorithms:
– “aes128”
– “aes256”
– “chacha20”

ip: “10.192.0.100”

# ———- Advanced features ahead ———-

auto-claim: true

claims:
– 10.192.0.0/24

#ifup: ~
#ifdown: ~

device:
name: “vpncloud%d”
type: tap #支持tun、tap两种类型
fix-rp-filter: true

mode: normal #tap模式默认是switch,tun模式默认是router。这里维持normal即可

port-forwarding: true

switch-timeout: 300

peer-timeout: 300
keepalive: 300

user: “root”
group: “root”

#beacon:
# store: ~
# load: ~
# interval: 3600
# password: “eTBK6A37u9NUYQ4GPWpQSdNj4zsjcWMG”

#statsd:
# server: ~
# prefix: ~

#pid-file: ~
#stats-file: ~

#hook: ~
#hooks: {}

最后让vpncloud开机启动和运行

$ sudo systemctl enable vpncloud@private
$ sudo systemctl restart vpncloud@private

——————– 分割线 ——————–

经验分享

0. 每个节点的IP都需要在配置文件中配置,不会自动分配的。也就是ip: “10.192.0.100” 这行

1. 这个是udp的,或多或少会受到qos影响的。所有打洞软件中,udp效率应该是最高的,如果你想再套一层udp over tcp,我个人测试只会是更差的。

2. 配置文件中crypto默认是chacha20,可以保持默认,如果你的设备的CPU能硬解AES,可以尝试用aes256。新版本中会自动选择合适的加密方式

3. ping或测速什么,都是取决于你原来到目标服务器的延迟和速度有多少,和隧道没太大关系,网络该烂的还是烂。

4. 如果想要优化吞吐量,可以考虑把MTU加大,我自己目前设置的MTU是7000,用下来也是非常靠谱的,对比测试可以看官方的文档 https://vpncloud.ddswd.de/features/performance/,个人建议如果不是物理延迟很低,这个值还是1400比较好。还是得根据实际情况定。

5. 关于加密,这里有个地方是可以设置的,crypto:password,长度为32位,注意每一个节点都是一样的。

6. 我习惯在peers那里留两个长期稳定运行的节点,其他不重要的节点就没必要写在这个配置文件中了,有节点上线,会自动并入网络的。

——————– 分割线 ——————–

关于nat的问题

既然这是个虚拟组网的软件,那自然nat是不在话下的,你只需要在某个节点,把iptables转发打开,就跟你们常用的vpn那种设置一样。其他节点再整个策略路由,把ip整理好,直接走这个虚拟内网就好。

在落地节点上打开转发,对vpncloud的网段进行nat转发,并劫持一下dns查询吧。

$ sudo echo "1" > /proc/sys/net/ipv4/ip_forward
$ sudo iptables -t nat -A POSTROUTING -s 10.192.0.0/24 ! -d 10.192.0.0/24 -m comment --comment "vpncloud" -j MASQUERADE
$ sudo iptables -t nat -A PREROUTING -s 10.192.0.0/24 -p udp --dport 53 -j DNAT --to 8.8.8.8:53
$ sudo iptables -t nat -A PREROUTING -s 10.192.0.0/24 -p tcp --dport 53 -j DNAT --to 8.8.8.8:53

这样实现了什么?换句话说这可以怎么玩?

你可以在国内一个主机上做最简单的socks代理,分别把要代理的目标,通过策略路由导到不同的落地节点去。

祝大家玩的愉快。