正好和我的网名一样,缘分妙不可言

项目地址

GitHub: https://github.com/slackhq/nebula

主要文件

nebula:主程序

nebula-cert:证书生成工具

基本使用

创建CA证书

1
2
3
4
#linux
./nebula-cert ca -name "网络证书名"
#windows
nebula-cert ca -name "网络证书名"

网络证书名随意填写,方便记忆即可

执行完成后生成ca.key(私钥)和ca.crt(公钥)两个文件

ca.key用于签名所有的Nebula节点,尽可能单独存放不要放在任何一个节点上

创建密钥与证书

格式:

1
./nebula-cert sign -name "节点名称" -ip "节点IP/24" -subnets "子网" -groups "组名"
  • -name,节点名称,可以任意填写,也可以用域名的方式填写
  • -ip,指定IP地址,需要手动指定,且不能与已分配的IP地址冲突
  • -subnets,指定当前节点的非Nebula路由,以便其它节点能访问当前节点的子网
  • -group,指定该节点所在的组,方便 Nebula 进行防火墙规则配置

示例

1
2
3
./nebula-cert sign -name "lighthouse" -ip "192.168.100.1/24"
./nebula-cert sign -name "router" -ip "192.168.100.11/24" -subnets "172.16.1.0/24" -groups "router,servers"
./nebula-cert sign -name "laptop" -ip "192.168.100.100/24" -groups "laptop,ssh"

配置节点

官方配置文件:https://github.com/slackhq/nebula/blob/master/examples/config.yml

在Nebula中节点分为两类:LightHouse节点和和Nebula节点,LightHouse节点需要部署在有公网IP的服务器上

在Nebula网络中,节点之间通过Nebula IP进行通信,注意区分Nebula IPIP的区别

配置LightHouse节点

配置重点

1
2
3
4
5
6
7
8
9
static_host_map: #静态路由设置为空
lighthouse:
  am_lighthouse: true #设置为LightHouse节点
listen:
  host: "[::]" #同时监听Ipv6和Ipv4
  port: 4242 #监听端口
relay: #如果NAT穿透连接异常,可以设置转发节点通过中继节点进行流量转发
  am_relay: true #是否为中继节点
  use_relays: true

示例配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
pki:
  ca: /etc/nebula/ca.crt
  cert: /etc/nebula/host.crt
  key: /etc/nebula/host.key
static_host_map: #空
lighthouse:
  am_lighthouse: true #设置为LightHouse节点
listen:
  host: "[::]" #同时监听Ipv6和Ipv4
  port: 4242
punchy:
  punch: true
cipher: aes
relay:
  am_relay: true
  use_relays: true
tun:
  disabled: false
  dev: nebula1
  drop_local_broadcast: false
  drop_multicast: false
  tx_queue: 500
  mtu: 1300
  routes:
  unsafe_routes:
logging:
  level: info
  format: text
firewall:
  conntrack:
    tcp_timeout: 12m
    udp_timeout: 3m
    default_timeout: 10m
    max_connections: 100000
  outbound:
    - port: any
      proto: any
      host: any
  inbound:
    - port: any
      proto: any
      host: any

配置Nebula节点

配置重点

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
static_host_map:
  "192.168.100.1": ["LightHouse域名或IP:端口"] #设置Nebula IP到真实域名或IP的映射
lighthouse:
  am_lighthouse: false #设置为Nebula节点
  interval: 60
  hosts:
    - "192.168.100.1" #LightHouse的Nebula IP
listen:
  host: "[::]" #同时监听Ipv6和Ipv4
  port: 0 #启用动态端口
tun: 
  unsafe_routes: #(可选配置)可以路由某个子节点所在的路由,在所有需要访问该转发节点的访问节点中添加
    - route: 172.16.1.0/24 #想要访问子节点的网段
      via: 192.168.100.11 # 转发节点对应的路由

示例配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
pki:
  ca: "/etc/nebula/ca.crt"
  cert: "/etc/nebula/host.crt"
  key: "/etc/nebula/host.key"
static_host_map:
  "192.168.100.1": ["124.222.162.210:4242"]
lighthouse:
  am_lighthouse: false
  interval: 60
  hosts:
    - "192.168.100.1"
listen:
  host: "[::]"
  port: 0
punchy:
  punch: true
relay:
  relays:
    - 192.168.100.1 #中继节点的Nebula IP
  am_relay: false
  use_relays: true
tun:
  disabled: false
  dev: nebula1
  drop_local_broadcast: false
  drop_multicast: false
  tx_queue: 500
  mtu: 1300
  routes:
  unsafe_routes:
logging:
  level: info
  format: text
firewall:
  outbound_action: drop
  inbound_action: drop
  conntrack:
    tcp_timeout: 12m
    udp_timeout: 3m
    default_timeout: 10m
  outbound:
    - port: any
      proto: any
      host: any
  inbound:
    - port: any
      proto: any
      host: any

防火墙规则

官方默认:对外访问网络没有任何限制,对内访问只能通过PING,属于laptop和home组的可以通过443/TCP访问当前节点

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
firewall:
  outbound:
    # 允许所有出站
    - port: any
      proto: any
      host: any

  inbound:
    # 入站只允许ping
    - port: any
      proto: icmp
      host: any

    # 允许laptop和home组通过443端口访问
    - port: 443
      proto: tcp
      groups:
        - laptop
        - home

    # 允许192.168.100.1/24网段下的remote_client组通过8080端口访问
    - port: 8080
      proto: tcp
      group: remote_client
      local_cidr: 192.168.100.1/24

运行节点

创建目录

创建目录并将配置文件和证书移动到指定目录

1
2
3
4
mv config.yaml /etc/nebula/config.yaml
mv ca.crt /etc/nebula/ca.crt
mv router.crt /etc/nebula/host.crt
mv router.key /etc/nebula/host.key
1
./nebula -config /etc/nebula/config.yaml

测试

在任何一个非Lighthouse的节点上,都可以ping通Lighthouse则证明配置成功