Configure a zerotier-one network controller
This commit is contained in:
		
							parent
							
								
									f66f6e2969
								
							
						
					
					
						commit
						cb8fc25fc8
					
				
							
								
								
									
										4
									
								
								clients/zerotier-1.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								clients/zerotier-1.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | ||||
| { | ||||
|   "name": "zerotier-1", | ||||
|   "public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx59liuiEXuAykaiQhjvO\nMimzWH2MOE/GdfPdlGG0IupDtGbDgpsu6lHB/Tc8ct+SEsj55KuamEmUew3EzWRQ\ngVWAPjWtlk6gqVlpU+8eJjTAxT1vaEOvetzliPDNzRBk1AAzS0IkMQwPAIqOD2Vm\nz+QDrTiEFNnbKyBDQ54uY9jBtEgTHgzZyc9KHTjcodJu/oCmOuO0ieTtMS4CDWVl\no2auyABpXX6PzW3hFvH/GB0IlVC5IBa7XS6JrbIFbZCvoAYf/egcQUTToNiKH45e\n2tPZbFpOt955zwInKTioW+Ak3qVVEPvCZ9IBTN7jZkSQuP4Ob5SA4+IbDJcXGulG\nZQIDAQAB\n-----END PUBLIC KEY-----\n" | ||||
| } | ||||
							
								
								
									
										56
									
								
								nodes/zerotier-1.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								nodes/zerotier-1.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,56 @@ | ||||
| { | ||||
|   "name": "zerotier-1", | ||||
|   "normal": { | ||||
|     "knife_zero": { | ||||
|       "host": "10.147.20.147" | ||||
|     } | ||||
|   }, | ||||
|   "automatic": { | ||||
|     "fqdn": "zerotier-1", | ||||
|     "os": "linux", | ||||
|     "os_version": "5.4.0-1028-kvm", | ||||
|     "hostname": "zerotier-1", | ||||
|     "ipaddress": "192.168.122.72", | ||||
|     "roles": [ | ||||
| 
 | ||||
|     ], | ||||
|     "recipes": [ | ||||
|       "kosmos-base", | ||||
|       "kosmos-base::default", | ||||
|       "kosmos_zerotier::controller", | ||||
|       "kosmos_zerotier::firewall", | ||||
|       "apt::default", | ||||
|       "timezone_iii::default", | ||||
|       "timezone_iii::debian", | ||||
|       "ntp::default", | ||||
|       "ntp::apparmor", | ||||
|       "kosmos-base::systemd_emails", | ||||
|       "apt::unattended-upgrades", | ||||
|       "kosmos-base::firewall", | ||||
|       "kosmos-postfix::default", | ||||
|       "postfix::default", | ||||
|       "postfix::_common", | ||||
|       "postfix::_attributes", | ||||
|       "postfix::sasl_auth", | ||||
|       "hostname::default" | ||||
|     ], | ||||
|     "platform": "ubuntu", | ||||
|     "platform_version": "20.04", | ||||
|     "cloud": null, | ||||
|     "chef_packages": { | ||||
|       "chef": { | ||||
|         "version": "15.14.0", | ||||
|         "chef_root": "/opt/chef/embedded/lib/ruby/gems/2.6.0/gems/chef-15.14.0/lib" | ||||
|       }, | ||||
|       "ohai": { | ||||
|         "version": "15.12.0", | ||||
|         "ohai_root": "/opt/chef/embedded/lib/ruby/gems/2.6.0/gems/ohai-15.12.0/lib/ohai" | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   "run_list": [ | ||||
|     "recipe[kosmos-base]", | ||||
|     "recipe[kosmos_zerotier::controller]", | ||||
|     "recipe[kosmos_zerotier::firewall]" | ||||
|   ] | ||||
| } | ||||
| @ -1,4 +1,3 @@ | ||||
| # kosmos_zerotier | ||||
| 
 | ||||
| TODO: Enter the cookbook description here. | ||||
| 
 | ||||
| Configures zerotier controllers and firewall rules. | ||||
|  | ||||
							
								
								
									
										306
									
								
								site-cookbooks/kosmos_zerotier/files/zerotier-ctl.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										306
									
								
								site-cookbooks/kosmos_zerotier/files/zerotier-ctl.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,306 @@ | ||||
| #!/bin/bash | ||||
| 
 | ||||
| # | ||||
| # team:     devops/zerotier-ctl | ||||
| # status:   laboratory | ||||
| # author:   Makersphere Labs <opensource@makersphere.org> | ||||
| # | ||||
| VERSION=1.1.14 | ||||
| # | ||||
| # | ||||
| # | ||||
| ZT_AUTHFILE='/var/lib/zerotier-one/authtoken.secret' | ||||
| ZT_PUBLICID='/var/lib/zerotier-one/identity.public' | ||||
| ZT_NETWORK_PRIVATE=1 | ||||
| ZT_NETWORK_BRIDGING=0 | ||||
| ZT_NETWORK_V4_ASSIGN_MODE='zt' | ||||
| ZT_NETWORK_V6_ASSIGN_MODE='none' | ||||
| # | ||||
| # Colors | ||||
| # | ||||
| RED='\033[0;31m' | ||||
| ORANGE='\033[0;33m' | ||||
| GREEN='\033[0;32m' | ||||
| NC='\033[0m' | ||||
| # | ||||
| # Main Application | ||||
| # | ||||
| if [ "$1" != '' ]; then | ||||
|     # | ||||
| 	# List all networks on this controller | ||||
| 	# | ||||
|     if [ "$1" == 'listnetworks' ] || [ "$1" == 'list' ] || [ "$1" == '-l' ]; then | ||||
|         echo | ||||
|         echo -e "${ORANGE}=> List Networks${NC}"; | ||||
|         echo | ||||
|         # Check if authtoken.secret exists | ||||
|         if [ -f $ZT_AUTHFILE ]; then | ||||
|             echo -e "${ORANGE}> Loading networks...${NC}"; | ||||
|             echo | ||||
|             ZT_AUTHTOKEN=`cat $ZT_AUTHFILE` | ||||
|             # Make a GET request to the API | ||||
|             # Tested with ZeroTier One (1.1.4) API v1. | ||||
|             ZT_API_RESPONSE=$(curl -LsfSw '\n%{http_code}' \ | ||||
|                             -X GET http://localhost:9993/controller/network?auth=${ZT_AUTHTOKEN}) | ||||
|             if [ "$(echo "$ZT_API_RESPONSE" | tail -n1 )" == '200' ]; then | ||||
|                 echo -e "> $(echo "$ZT_API_RESPONSE" | head -n-1 )"; | ||||
|                 echo | ||||
|                 echo -e "${GREEN}==> Success${NC}"; | ||||
|                 echo | ||||
| 				exit 0; | ||||
|             else | ||||
|                 echo -e "${RED}==> Failed to connect to Controller${NC}"; | ||||
|                 exit 1; | ||||
|             fi | ||||
|         else | ||||
|             echo -e "${RED}==> The AuthFile is missing${NC}"; | ||||
|             exit 1; | ||||
|         fi | ||||
|     # | ||||
|     # Add a new network to this controller | ||||
|     # | ||||
|     elif [ "$1" == 'create' ] || [ "$1" == '-c' ]; then | ||||
|         echo | ||||
|         echo -e "${ORANGE}=> Create Network${NC}"; | ||||
|         echo | ||||
|         if [ "$2" != '' ]; then | ||||
|             # Check if authtoken.secret exists | ||||
|             if [ -f $ZT_AUTHFILE ]; then | ||||
|                 ZT_NETWORK_NAME=$2 | ||||
|                 ZT_NETWORK_SERVER_ID=`head -c 10 $ZT_PUBLICID`; | ||||
|                 ZT_AUTHTOKEN=`cat $ZT_AUTHFILE` | ||||
|                 echo "> Add a configuration for network '${2}'..." | ||||
|                 read -p '> Enter a start IP address (e.g. 10.1.1.1): ' READ_IP | ||||
|                 if [ "$READ_IP" != '' ]; then | ||||
|                     ZT_NETWORK_IP_START=$READ_IP | ||||
|                     read -p '> Enter the last IP address (e.g. 10.1.1.254): ' READ_IP2 | ||||
|                     if [ "$READ_IP2" != '' ]; then | ||||
|                         ZT_NETWORK_IP_END=$READ_IP2 | ||||
|                         read -p '> Enter the network address (e.g. 10.1.1.0): ' READ_ROUTE | ||||
|                         if [ "$READ_ROUTE" != '' ]; then | ||||
|                             ZT_NETWORK_IP_LOCAL_ROUTE=$READ_ROUTE | ||||
|                             read -p '> Enter the network submask (e.g. /24): /' READ_MASK | ||||
|                             if [ "$READ_MASK" != '' ]; then | ||||
|                                 ZT_NETWORK_IP_LOCAL_ROUTE_MASK=$READ_MASK | ||||
|                             else | ||||
|                                 echo -e "${RED}==> Please enter a vaild submask${NC}"; | ||||
|                                 exit 1; | ||||
|                             fi | ||||
|                         else | ||||
|                             echo -e "${RED}==> Please enter a network address${NC}"; | ||||
|                             exit 1; | ||||
|                         fi | ||||
|                     else | ||||
|                         echo -e "${RED}==> Please enter the last IP address${NC}"; | ||||
|                         exit 1; | ||||
|                     fi | ||||
|                 else | ||||
|                     echo -e "${RED}==> Please enter a start IP address${NC}"; | ||||
|                     exit 1; | ||||
|                 fi | ||||
|                 # Huge JSON file ahead | ||||
|                 # Do not change this JSON string! | ||||
|                 ZT_NETWORK_CONFIG="{\"auth\":\"${ZT_AUTHTOKEN}\",\"name\":\"${ZT_NETWORK_NAME}\",\"private\":${ZT_NETWORK_PRIVATE},\"allowPassiveBridging\":${ZT_NETWORK_BRIDGING},\"v4AssignMode\":\"${ZT_NETWORK_V4_ASSIGN_MODE}\",\"v6AssignMode\":\"${ZT_NETWORK_V6_ASSIGN_MODE}\",\"routes\":[{\"target\":\"${ZT_NETWORK_IP_LOCAL_ROUTE}/${ZT_NETWORK_IP_LOCAL_ROUTE_MASK}\",\"via\":null,\"flags\":0,\"metric\":0}],\"ipAssignmentPools\":[{\"ipRangeStart\":\"${ZT_NETWORK_IP_START}\",\"ipRangeEnd\":\"${ZT_NETWORK_IP_END}\"}],\"rules\":[{\"ruleNo\":10,\"action\":\"accept\"}]}" | ||||
|                 echo '> Do you wish to add this network?' | ||||
|                 select ZT_ADD_NET_YN in 'Yes' 'No'; do | ||||
|                     case $ZT_ADD_NET_YN in | ||||
|                         'Yes' ) | ||||
|                             # Make a POST request to the API | ||||
|                             # Tested with ZeroTier One (1.1.4) API v1. | ||||
|                             ZT_API_RESPONSE=$(curl -LsfSw '\n%{http_code}' \ | ||||
|                                 -X POST -d "$ZT_NETWORK_CONFIG" \ | ||||
|                                 http://localhost:9993/controller/network/${ZT_NETWORK_SERVER_ID}______?auth=${ZT_AUTHTOKEN}) | ||||
|                             if [ "$(echo "$ZT_API_RESPONSE" | tail -n1 )" == '200' ]; then | ||||
|                                 ZT_NETWORK_NWID=$(echo "$(echo "$ZT_API_RESPONSE" | head -n-1 )" | grep -Po '(?<="nwid": ")[^"]*') | ||||
|                                 echo -e "${GREEN}==> Network '${ZT_NETWORK_NAME}' (ID ${ZT_NETWORK_NWID}) was successfully added to controller '${ZT_NETWORK_SERVER_ID}'${NC}"; | ||||
|                                 echo | ||||
|                                 exit 0; | ||||
|                             else | ||||
|                                 echo -e "${RED}==> Failed to connect to Controller${NC}"; | ||||
|                                 exit 1; | ||||
|                             fi | ||||
|                             #DEBUG: echo $ZT_NETWORK_CONFIG | ||||
|                         break;; | ||||
|                         'No' ) | ||||
|                             echo -e "${ORANGE}==> Nothing was added${NC}"; | ||||
|                             echo | ||||
|                             exit 0; | ||||
|                         exit;; | ||||
|                     esac | ||||
|                 done | ||||
|             else | ||||
|                 echo -e "${RED}==> The AuthFile is missing${NC}"; | ||||
|                 exit 1; | ||||
|             fi | ||||
|         else | ||||
|             echo -e "${RED}==> Please specify a network${NC}"; | ||||
| 			exit 1; | ||||
|         fi | ||||
|     # | ||||
|     # Remove a new network from this controller | ||||
|     # | ||||
|     elif [ "$1" == 'delete' ]  || [ "$1" == '-d' ]; then | ||||
|         echo | ||||
|         echo -e "${ORANGE}=> Delete Network${NC}"; | ||||
|         echo | ||||
|         if [ "$2" != '' ]; then | ||||
|             # Check if authtoken.secret exists | ||||
|             if [ -f $ZT_AUTHFILE ]; then | ||||
|                 ZT_NETWORK_ID=$2 | ||||
|                 ZT_AUTHTOKEN=`cat $ZT_AUTHFILE` | ||||
|                 echo '> Do you wish to remove this network?' | ||||
|                 select ZT_DEL_NET_YN in 'Yes' 'No'; do | ||||
|                     case $ZT_DEL_NET_YN in | ||||
|                         'Yes' ) | ||||
|                             # Make a DELETE request to the API | ||||
|                             # Tested with ZeroTier One (1.1.4) API v1. | ||||
|                             ZT_API_RESPONSE=$(curl -LsfSw '\n%{http_code}' \ | ||||
|                                 -X DELETE http://localhost:9993/controller/network/${ZT_NETWORK_ID}?auth=${ZT_AUTHTOKEN}) | ||||
|                             if [ "$(echo "$ZT_API_RESPONSE" | tail -n1 )" == '200' ]; then | ||||
|                                 echo -e "${GREEN}==> Network '${ZT_NETWORK_ID}' was removed${NC}"; | ||||
|                                 echo | ||||
|                                 exit 0; | ||||
|                             else | ||||
|                                 echo -e "${RED}==> Failed to connect to Controller${NC}"; | ||||
|                                 exit 1; | ||||
|                             fi | ||||
|                         break;; | ||||
|                         'No' ) | ||||
|                             echo -e "${ORANGE}==> Nothing was removed${NC}"; | ||||
|                             echo | ||||
|                             exit 0; | ||||
|                         exit;; | ||||
|                     esac | ||||
|                 done | ||||
| 
 | ||||
|             else | ||||
|                 echo -e "${RED}==> The AuthFile is missing${NC}"; | ||||
|                 exit 1; | ||||
|             fi | ||||
|         else | ||||
|             echo -e "${RED}==> Please specify a network${NC}"; | ||||
| 			exit 1; | ||||
|         fi | ||||
|     # | ||||
|     # Authorize a new client to a network | ||||
|     # | ||||
|     elif [ "$1" == 'auth' ]  || [ "$1" == '-a' ]; then | ||||
|         echo | ||||
|         echo -e "${ORANGE}=> Authorize Client${NC}"; | ||||
|         echo | ||||
|         if [ "$2" != '' ] && [ "$3" != '' ]; then | ||||
|             # Check if authtoken.secret exists | ||||
|             if [ -f $ZT_AUTHFILE ]; then | ||||
|                 ZT_NETWORK=$2 | ||||
|                 ZT_MEMBER=$3 | ||||
|                 ZT_AUTHTOKEN=`cat $ZT_AUTHFILE` | ||||
|                 echo "> Do you wish to authorize this client (${ZT_MEMBER})?" | ||||
|                 select ZT_ADD_MEM_YN in 'Yes' 'No'; do | ||||
|                     case $ZT_ADD_MEM_YN in | ||||
|                         'Yes' ) | ||||
|                             # Make a POST request to the API | ||||
|                             # Tested with ZeroTier One (1.1.4) API v1. | ||||
|                             ZT_API_RESPONSE=$(curl -LsfSw '\n%{http_code}' \ | ||||
|                                 -X POST -d "{\"authorized\":true}" \ | ||||
|                                 http://localhost:9993/controller/network/${ZT_NETWORK}/member/${ZT_MEMBER}?auth=${ZT_AUTHTOKEN}) | ||||
|                             if [ "$(echo "$ZT_API_RESPONSE" | tail -n1 )" == '200' ]; then | ||||
|                                 echo -e "${GREEN}==> Client '${3}' was authorized to network '${2}'${NC}"; | ||||
|                                 echo | ||||
|                                 exit 0; | ||||
|                             else | ||||
|                                 echo -e "${RED}==> Failed to connect to Controller${NC}"; | ||||
|                                 exit 1; | ||||
|                             fi | ||||
|                         break;; | ||||
|                         'No' ) | ||||
|                             echo -e "${ORANGE}==> Nothing was added${NC}"; | ||||
|                             echo | ||||
|                             exit 0; | ||||
|                         exit;; | ||||
|                     esac | ||||
|                 done | ||||
|             else | ||||
|                 echo -e "${RED}==> The AuthFile is missing${NC}"; | ||||
|                 exit 1; | ||||
|             fi | ||||
|         else | ||||
|             echo -e "${RED}==> Please specify a network & client${NC}"; | ||||
| 			exit 1; | ||||
|         fi | ||||
|     # | ||||
|     # Deauthorize a client | ||||
|     # | ||||
|     elif [ "$1" == 'deauth' ] || [ "$1" == '-da' ]; then | ||||
|         echo | ||||
|         echo -e "${ORANGE}=> Deauthorize Client${NC}"; | ||||
|         echo | ||||
|         if [ "$2" != '' ] && [ "$3" != '' ]; then | ||||
|             # Check if authtoken.secret exists | ||||
|             if [ -f $ZT_AUTHFILE ]; then | ||||
|                 ZT_NETWORK=$2 | ||||
|                 ZT_MEMBER=$3 | ||||
|                 ZT_AUTHTOKEN=`cat $ZT_AUTHFILE` | ||||
|                 echo "> Do you wish to deauthorize this client (${ZT_MEMBER})?" | ||||
|                 select ZT_DEL_MEM_YN in 'Yes' 'No'; do | ||||
|                     case $ZT_DEL_MEM_YN in | ||||
|                         'Yes' ) | ||||
|                             # Make a DELETE request to the API | ||||
|                             # Tested with ZeroTier One (1.1.4) API v1. | ||||
|                             ZT_API_RESPONSE=$(curl -LsfSw '\n%{http_code}' \ | ||||
|                                 -X DELETE http://localhost:9993/controller/network/${ZT_NETWORK}/member/${ZT_MEMBER}?auth=${ZT_AUTHTOKEN}) | ||||
|                             echo $ZT_API_RESPONSE | ||||
|                             if [ "$(echo "$ZT_API_RESPONSE" | tail -n1 )" == '200' ]; then | ||||
|                                 echo -e "${GREEN}==> Client '${3}' was deauthorized${NC}"; | ||||
|                                 echo | ||||
|                                 exit 0; | ||||
|                             else | ||||
|                                 echo -e "${RED}==> Failed to connect to Controller${NC}"; | ||||
|                                 exit 1; | ||||
|                             fi | ||||
|                         break;; | ||||
|                         'No' ) | ||||
|                             echo -e "${ORANGE}==> Nothing was removed${NC}"; | ||||
|                             echo | ||||
|                             exit 0; | ||||
|                         exit;; | ||||
|                     esac | ||||
|                 done | ||||
|             else | ||||
|                 echo -e "${RED}==> The AuthFile is missing${NC}"; | ||||
|                 exit 1; | ||||
|             fi | ||||
|         else | ||||
|             echo -e "${RED}==> Please specify a network & client${NC}"; | ||||
| 			exit 1; | ||||
|         fi | ||||
|     # | ||||
|     # Display help | ||||
|     # | ||||
|     elif [ "$1" == 'help' ] || [ "$1" == '-h' ]; then | ||||
|         echo -e " | ||||
| ${ORANGE}+++ ZeroTier Controller CLI +++${NC} | ||||
| 
 | ||||
| Version ${VERSION} | ||||
| 
 | ||||
| Copyright © 2016 Makersphere Labs | ||||
| Licensed under GNU GPL v3 | ||||
| 
 | ||||
| Usage: zerotier-ctl <command> [<args>] | ||||
| 
 | ||||
| Available commands: | ||||
| help                           - Display this help | ||||
| listnetworks                   - List all network IDs | ||||
| create <name>                  - Create a new network | ||||
| delete <network>               - Delete a network | ||||
| auth <network> <client>        - Authorize a client | ||||
| deauth <network> <client>      - Deauthorize a client"; | ||||
|         echo | ||||
|         exit 0; | ||||
|     else | ||||
|         echo -e "${ORANGE}==> Use 'help' to get started${NC}"; | ||||
|     	exit 1; | ||||
|     fi | ||||
| else | ||||
|     echo -e "${ORANGE}==> Use 'help' to get started${NC}"; | ||||
|     exit 1; | ||||
| fi | ||||
							
								
								
									
										9
									
								
								site-cookbooks/kosmos_zerotier/recipes/controller.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								site-cookbooks/kosmos_zerotier/recipes/controller.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | ||||
| # | ||||
| # Cookbook:: kosmos_zerotier | ||||
| # Recipe:: controller | ||||
| # | ||||
| 
 | ||||
| cookbook_file "/usr/local/sbin/zerotier-ctl" do | ||||
|   source "zerotier-ctl.sh" | ||||
|   mode "0750" | ||||
| end | ||||
| @ -2,24 +2,3 @@ | ||||
| # Cookbook:: kosmos_zerotier | ||||
| # Recipe:: default | ||||
| # | ||||
| # The MIT License (MIT) | ||||
| # | ||||
| # Copyright:: 2020, Kosmos Developers | ||||
| # | ||||
| # Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
| # of this software and associated documentation files (the "Software"), to deal | ||||
| # in the Software without restriction, including without limitation the rights | ||||
| # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
| # copies of the Software, and to permit persons to whom the Software is | ||||
| # furnished to do so, subject to the following conditions: | ||||
| # | ||||
| # The above copyright notice and this permission notice shall be included in | ||||
| # all copies or substantial portions of the Software. | ||||
| # | ||||
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
| # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
| # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
| # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
| # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||
| # THE SOFTWARE. | ||||
|  | ||||
| @ -2,30 +2,9 @@ | ||||
| # Cookbook:: kosmos_zerotier | ||||
| # Recipe:: firewall | ||||
| # | ||||
| # The MIT License (MIT) | ||||
| # | ||||
| # Copyright:: 2020, Kosmos Developers | ||||
| # | ||||
| # Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
| # of this software and associated documentation files (the "Software"), to deal | ||||
| # in the Software without restriction, including without limitation the rights | ||||
| # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
| # copies of the Software, and to permit persons to whom the Software is | ||||
| # furnished to do so, subject to the following conditions: | ||||
| # | ||||
| # The above copyright notice and this permission notice shall be included in | ||||
| # all copies or substantial portions of the Software. | ||||
| # | ||||
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
| # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
| # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
| # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
| # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||
| # THE SOFTWARE. | ||||
| 
 | ||||
| firewall_rule "zerotier" do | ||||
|   port     node["kosmos_zerotier"]["server_port"] | ||||
|   protocol :tcp | ||||
|   protocol :none | ||||
|   command  :allow | ||||
| end | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user