Nebula
正好和我的网名一样,缘分妙不可言 项目地址 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 IP和IP的区别 配置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访问当前节点 ...