├── LICENSE ├── README.md ├── setup.sh ├── tun └── zt.sh /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Michael M. Garland, III 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # lxc-zerotier 2 | ## ZeroTier configs needed for LXC containers 3 | 4 | Basically, the configuration requires a tun device, which is not created as part of a normal container installation. Copy the file named tun into your /etc/init.d/ directory, chmod 755, and then run 'update-rc.d tun defaults' to add it to the normal boot order. Restart networking service to immediately reap the benefits. 5 | 6 | Or just chmod +x setup.sh and execute it with sh ./setup.sh and it'll do it for you. 7 | 8 | You may have to restart the zerotier-one service ('service zerotier-one restart', be warned, this may appear to hang for a minute.) 9 | 10 | 'ip addr | grep "zt"' to see if the interface is up and has an assigned IP in your container. 11 | 12 | That's it. 13 | -------------------------------------------------------------------------------- /setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Description: setup script to copy tun script into init, 3 | # and enable and start relevant services. 4 | sudo cp tun /etc/init.d/ 5 | sudo chmod 755 /etc/init.d/tun 6 | sudo update-rc.d tun defaults 7 | sudo service networking restart 8 | sudo zerotier-cli info 9 | 10 | -------------------------------------------------------------------------------- /tun: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | ### BEGIN INIT INFO 3 | # Provides: tun 4 | # Required-Start: $network 5 | # Required-Stop: $openvpn 6 | # Default-Start: S 1 2 7 | # Default-Stop: 0 6 8 | # Short-Description: Make a tun device. 9 | # Description: Create a tundev for ZeroTier, place in /etc/init.d/tun 10 | # chmod 755 /etc/init.d/tun and update-rc.d tun defaults 11 | ### END INIT INFO 12 | 13 | case "$1" in 14 | start) 15 | mkdir /dev/net 16 | mknod /dev/net/tun c 10 200 17 | chmod 666 /dev/net/tun 18 | ;; 19 | stop) 20 | rm /dev/net/tun 21 | rmdir /dev/net 22 | ;; 23 | restart) 24 | #do nothing! 25 | ;; 26 | esac 27 | 28 | exit 0 -------------------------------------------------------------------------------- /zt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | <"/tmp/ZeroTier One.pkg" 53 | $SUDO installer -pkg "/tmp/ZeroTier One.pkg" -target / 54 | 55 | echo 56 | echo '*** Waiting for identity generation...' 57 | 58 | while [ ! -f "/Library/Application Support/ZeroTier/One/identity.secret" ]; do 59 | sleep 1 60 | done 61 | 62 | echo 63 | echo "*** Success! You are connected to port `cat '/Library/Application Support/ZeroTier/One/identity.public' | cut -d : -f 1` of Earth's planetary smart switch." 64 | echo 65 | 66 | exit 0 67 | fi 68 | fi 69 | 70 | # Detect already-installed on Linux 71 | if [ -f /usr/sbin/zerotier-one ]; then 72 | echo '*** ZeroTier One appears to already be installed.' 73 | exit 0 74 | fi 75 | 76 | rm -f /tmp/zt-gpg-key 77 | echo '-----BEGIN PGP PUBLIC KEY BLOCK-----' >/tmp/zt-gpg-key 78 | cat >>/tmp/zt-gpg-key << END_OF_KEY 79 | Comment: GPGTools - https://gpgtools.org 80 | 81 | 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 128 | =JgAv 129 | END_OF_KEY 130 | echo '-----END PGP PUBLIC KEY BLOCK-----' >>/tmp/zt-gpg-key 131 | 132 | echo '*** Detecting Linux Distribution' 133 | echo 134 | 135 | if [ -f /etc/debian_version ]; then 136 | dvers=`cat /etc/debian_version | cut -d '.' -f 1 | cut -d '/' -f 1` 137 | $SUDO rm -f /tmp/zt-sources-list 138 | 139 | if [ -f /etc/lsb-release -a -n "`cat /etc/lsb-release 2>/dev/null | grep -F trusty`" ]; then 140 | echo '*** Found Ubuntu "trusty", creating /etc/apt/sources.list.d/zerotier.list' 141 | echo "deb ${ZT_BASE_URL_HTTP}debian/trusty trusty main" >/tmp/zt-sources-list 142 | elif [ -f /etc/lsb-release -a -n "`cat /etc/lsb-release 2>/dev/null | grep -F wily`" ]; then 143 | echo '*** Found Ubuntu "wily", creating /etc/apt/sources.list.d/zerotier.list' 144 | echo "deb ${ZT_BASE_URL_HTTP}debian/wily wily main" >/tmp/zt-sources-list 145 | elif [ -f /etc/lsb-release -a -n "`cat /etc/lsb-release 2>/dev/null | grep -F xenial`" ]; then 146 | echo '*** Found Ubuntu "xenial", creating /etc/apt/sources.list.d/zerotier.list' 147 | echo "deb ${ZT_BASE_URL_HTTP}debian/xenial xenial main" >/tmp/zt-sources-list 148 | elif [ -f /etc/lsb-release -a -n "`cat /etc/lsb-release 2>/dev/null | grep -F zesty`" ]; then 149 | echo '*** Found Ubuntu "zesty", creating /etc/apt/sources.list.d/zerotier.list' 150 | echo "deb ${ZT_BASE_URL_HTTP}debian/zesty zesty main" >/tmp/zt-sources-list 151 | elif [ -f /etc/lsb-release -a -n "`cat /etc/lsb-release 2>/dev/null | grep -F precise`" ]; then 152 | echo '*** Found Ubuntu "precise", creating /etc/apt/sources.list.d/zerotier.list' 153 | echo "deb ${ZT_BASE_URL_HTTP}debian/precise precise main" >/tmp/zt-sources-list 154 | elif [ -f /etc/lsb-release -a -n "`cat /etc/lsb-release 2>/dev/null | grep -F artful`" ]; then 155 | echo '*** Found Ubuntu "artful", creating /etc/apt/sources.list.d/zerotier.list' 156 | echo "deb ${ZT_BASE_URL_HTTP}debian/artful artful main" >/tmp/zt-sources-list 157 | elif [ -f /etc/lsb-release -a -n "`cat /etc/lsb-release 2>/dev/null | grep -F cosmic`" ]; then 158 | echo '*** Found Ubuntu "cosmic", creating /etc/apt/sources.list.d/zerotier.list' 159 | echo "deb ${ZT_BASE_URL_HTTP}debian/bionic bionic main" >/tmp/zt-sources-list 160 | elif [ -f /etc/lsb-release -a -n "`cat /etc/lsb-release 2>/dev/null | grep -F kali-rolling`" ]; then 161 | echo '*** Found Kali Rolling, creating /etc/apt/sources.list.d/zerotier.list' 162 | echo "deb ${ZT_BASE_URL_HTTP}debian/bionic bionic main" >/tmp/zt-sources-list 163 | elif [ -f /etc/lsb-release -a -n "`cat /etc/lsb-release 2>/dev/null | grep -F yakkety`" ]; then 164 | echo '*** Found Ubuntu "yakkety", creating /etc/apt/sources.list.d/zerotier.list' 165 | echo "deb ${ZT_BASE_URL_HTTP}debian/yakkety yakkety main" >/tmp/zt-sources-list 166 | elif [ "$dvers" = "6" -o "$dvers" = "squeeze" ]; then 167 | echo '*** Found Debian "squeeze" (or similar), creating /etc/apt/sources.list.d/zerotier.list' 168 | echo "deb ${ZT_BASE_URL_HTTP}debian/squeeze squeeze main" >/tmp/zt-sources-list 169 | elif [ "$dvers" = "7" -o "$dvers" = "wheezy" ]; then 170 | echo '*** Found Debian "wheezy" (or similar), creating /etc/apt/sources.list.d/zerotier.list' 171 | echo "deb ${ZT_BASE_URL_HTTP}debian/wheezy wheezy main" >/tmp/zt-sources-list 172 | elif [ "$dvers" = "8" -o "$dvers" = "jessie" ]; then 173 | echo '*** Found Debian "jessie" (or similar), creating /etc/apt/sources.list.d/zerotier.list' 174 | echo "deb ${ZT_BASE_URL_HTTP}debian/jessie jessie main" >/tmp/zt-sources-list 175 | elif [ "$dvers" = "9" -o "$dvers" = "stretch" ]; then 176 | echo '*** Found Debian "stretch" (or similar), creating /etc/apt/sources.list.d/zerotier.list' 177 | echo "deb ${ZT_BASE_URL_HTTP}debian/stretch stretch main" >/tmp/zt-sources-list 178 | elif [ "$dvers" = "10" -o "$dvers" = "11" -o "$dvers" = "sid" -o "$dvers" = "buster" ]; then 179 | echo '*** Found Debian "buster", or "sid" (or similar), creating /etc/apt/sources.list.d/zerotier.list' 180 | echo "deb ${ZT_BASE_URL_HTTP}debian/buster buster main" >/tmp/zt-sources-list 181 | else 182 | echo "*** FAILED: unrecognized or ancient distribution: $dvers" 183 | exit 1 184 | fi 185 | 186 | $SUDO mv -f /tmp/zt-sources-list /etc/apt/sources.list.d/zerotier.list 187 | $SUDO chown 0 /etc/apt/sources.list.d/zerotier.list 188 | $SUDO chgrp 0 /etc/apt/sources.list.d/zerotier.list 189 | $SUDO apt-key add /tmp/zt-gpg-key 190 | 191 | echo 192 | echo '*** Installing zerotier-one package...' 193 | 194 | # Pre-1.1.6 Debian package did not properly enumerate its files, causing 195 | # problems when we try to replace it. So just delete them to force. 196 | if [ -d /var/lib/zerotier-one ]; then 197 | $SUDO rm -f /etc/init.d/zerotier-one /etc/systemd/system/multi-user.target.wants/zerotier-one.service /var/lib/zerotier-one/zerotier-one /usr/local/bin/zerotier-cli /usr/bin/zerotier-cli /usr/local/bin/zero 198 | fi 199 | 200 | cat /dev/null | $SUDO apt-get update 201 | cat /dev/null | $SUDO apt-get install -y zerotier-one 202 | elif [ -f /etc/SuSE-release -o -f /etc/suse-release -o -f /etc/SUSE-brand -o -f /etc/SuSE-brand -o -f /etc/suse-brand ]; then 203 | echo '*** Found SuSE, adding zypper YUM repo...' 204 | cat /dev/null | $SUDO zypper addrepo -t YUM -g ${ZT_BASE_URL_HTTP}redhat/el/7 zerotier 205 | cat /dev/null | $SUDO rpm --import /tmp/zt-gpg-key 206 | 207 | echo 208 | echo '*** Installing zeortier-one package...' 209 | 210 | cat /dev/null | $SUDO zypper install -y zerotier-one 211 | elif [ -d /etc/yum.repos.d ]; then 212 | baseurl="${ZT_BASE_URL_HTTP}redhat/el/7" 213 | if [ -n "`cat /etc/redhat-release 2>/dev/null | grep -i fedora`" ]; then 214 | echo "*** Found Fedora, creating /etc/yum.repos.d/zerotier.repo" 215 | baseurl="${ZT_BASE_URL_HTTP}redhat/fc/22" 216 | elif [ -n "`cat /etc/redhat-release 2>/dev/null | grep -i centos`" -o -n "`cat /etc/redhat-release 2>/dev/null | grep -i enterprise`" ]; then 217 | echo "*** Found RHEL/CentOS, creating /etc/yum.repos.d/zerotier.repo" 218 | baseurl="${ZT_BASE_URL_HTTP}redhat/el/\$releasever" 219 | elif [ -n "`cat /etc/system-release 2>/dev/null | grep -i amazon`" ]; then 220 | echo "*** Found Amazon (CentOS/RHEL based), creating /etc/yum.repos.d/zerotier.repo" 221 | if [ -n "`cat /etc/system-release 2>/dev/null | grep -F 'Amazon Linux 2'`" ]; then 222 | baseurl="${ZT_BASE_URL_HTTP}redhat/el/7" 223 | else 224 | baseurl="${ZT_BASE_URL_HTTP}redhat/amzn1/2016.03" 225 | fi 226 | else 227 | echo "*** Found unknown yum-based repo, using el/7, creating /etc/yum.repos.d/zerotier.repo" 228 | fi 229 | 230 | $SUDO rpm --import /tmp/zt-gpg-key 231 | 232 | $SUDO rm -f /tmp/zerotier.repo 233 | echo '[zerotier]' >/tmp/zerotier.repo 234 | echo 'name=ZeroTier, Inc. RPM Release Repository' >>/tmp/zerotier.repo 235 | echo "baseurl=$baseurl" >>/tmp/zerotier.repo 236 | echo 'enabled=1' >>/tmp/zerotier.repo 237 | echo 'gpgcheck=1' >>/tmp/zerotier.repo 238 | 239 | $SUDO mv -f /tmp/zerotier.repo /etc/yum.repos.d/zerotier.repo 240 | $SUDO chown 0 /etc/yum.repos.d/zerotier.repo 241 | $SUDO chgrp 0 /etc/yum.repos.d/zerotier.repo 242 | 243 | echo 244 | echo '*** Installing zerotier-one package...' 245 | 246 | if [ -e /usr/bin/dnf ]; then 247 | cat /dev/null | $SUDO dnf install -y zerotier-one 248 | else 249 | cat /dev/null | $SUDO yum install -y zerotier-one 250 | fi 251 | fi 252 | 253 | $SUDO rm -f /tmp/zt-gpg-key 254 | 255 | if [ ! -e /usr/sbin/zerotier-one ]; then 256 | echo 257 | echo '*** Package installation failed! Unfortunately there may not be a package' 258 | echo '*** for your architecture or distribution. For the source go to:' 259 | echo '*** https://github.com/zerotier/ZeroTierOne' 260 | echo 261 | exit 1 262 | fi 263 | 264 | echo 265 | echo '*** Enabling and starting zerotier-one service...' 266 | 267 | if [ -e /usr/bin/systemctl -o -e /usr/sbin/systemctl -o -e /sbin/systemctl -o -e /bin/systemctl ]; then 268 | $SUDO systemctl enable zerotier-one 269 | $SUDO systemctl start zerotier-one 270 | if [ "$?" != "0" ]; then 271 | echo 272 | echo '*** Package installed but cannot start service! You may be in a Docker' 273 | echo '*** container or using a non-standard init service.' 274 | echo 275 | exit 1 276 | fi 277 | else 278 | if [ -e /sbin/update-rc.d -o -e /usr/sbin/update-rc.d -o -e /bin/update-rc.d -o -e /usr/bin/update-rc.d ]; then 279 | $SUDO update-rc.d zerotier-one defaults 280 | else 281 | $SUDO chkconfig zerotier-one on 282 | fi 283 | $SUDO /etc/init.d/zerotier-one start 284 | fi 285 | 286 | echo 287 | echo '*** Waiting for identity generation...' 288 | 289 | while [ ! -f /var/lib/zerotier-one/identity.secret ]; do 290 | sleep 1 291 | done 292 | 293 | echo 294 | echo "*** Success! You are ZeroTier address [ `cat /var/lib/zerotier-one/identity.public | cut -d : -f 1` ]." 295 | echo 296 | 297 | exit 0 298 | -----BEGIN PGP SIGNATURE----- 299 | 300 | iQJJBAEBCAAzFiEEdKXpxFjhpDHx2lenFlcZiCPlKmEFAluqWHkVHGNvbnRhY3RA 301 | emVyb3RpZXIuY29tAAoJEBZXGYgj5SphXH0QAIYbK1aCNlkRyeHLiwCcU87o/2kf 302 | YbzjhlmDogl/0/SVRNm6eNGsauF7puDsZFoYQRrd76vq5YQy6DmoXqMlOOikLLFJ 303 | ffweV8Jv0sfmvXH/xTiu3VOUvprPjmILIIDBRVjFteu/M+Rdt23YDTz+xd36mzMD 304 | C5JQW47yWdy/VNT7ChpuEsNtSbPyBNZIQlP1tNqeK9/YeUhruj+64DFy0LWJ9p2G 305 | CY5U8IRpNo56UwGrGwaDZqTsx7m9kmtQTNJOu5yKAu3XUM7PLFkOukxZXFXG2NUQ 306 | /5NHxE7FGKjEuBkTymqETnd6U7thCwOl1fnVkga01ekQ5MxbYgyFePsHThi+3v5o 307 | CJqL1L3hzrEo6VhpHi/W5Cj4OaIltSW4cJFW/E0Tm3mA7gI8dSGHrifFxQ0MAZ1w 308 | hFLtn0i1haLtTmkFxu9ZAYIQMaOxqgDrRLDSCrLP9ClMOu+q4QHfrSH9AfT9jh4C 309 | kLr1F/aK3wQn+GvQ+caqii2J2Iz4Vvvf+2j9DSWjWPWmOKoItReF/JtaaXVOhcNQ 310 | UZAf6ICLTOAj+HNoy8rrw4Htc17dz00Di61YTwB7kbDuA5yq3aBM4ZeohBzGuOpu 311 | teekqWn3njwuCHOmYxPg7F60jAScVBMChLQ6nR6mnIKzw8iEE6Y9ceEEXNJws+3c 312 | +zS2p9ptHSW0PY7l 313 | =bV5f 314 | -----END PGP SIGNATURE----- 315 | --------------------------------------------------------------------------------