# Install VM Main Server -- Debian Buster 10.1.0 ## Boot from Debian Buster 10.1.0 ISO file ### Download ISO files * Install packages | <span style="background-color:lightblue">`apt-get install`</span> || | ---------------- | --------------- | | **`jigdo-file`** | Jigsaw Download | * Download jigdo files * https://cdimage.debian.org/debian-cd/current/amd64/jigdo-bd/ * <span style="background-color:lightblue">`jigdo-lite`</span> (in `/mnt/TMGN/iso/jigdo/debian-buster-10.1.0-amd64/`) * jigdo: <span style="background-color:lightgreen">debian-10.1.0-amd64-BD-{1,2,3,4}.jigdo debian-edu-10.1.0-amd64-BD-1.jigdo</span> * Files to scan: <span style="background-color:lightgreen"></span> * Debian mirror [[trusted=yes]]: <span style="background-color:lightgreen">ftp://ftp.tw.debian.org/debian/</span> * Debian non-US mirror: <span style="background-color:lightgreen">ftp://ftp.tw.debian.org/debian/</span> ### Boot from USB drive * Copy ISO image to USB drive * <span style="background-color:lightblue">`dd if=debian-10.1.0-amd64-BD-1.iso of=/dev/sdX bs=65536 oflag=direct`</span> * Boot from USB drive ### Boot from ISO file in hard disk * Prepare `.iso` image file * Prepare a `ext4` disk partition * `.iso` image file exceeds 4GB limit of `vfat` file system * Copy `debian-10.1.0-amd64-BD-1.iso` into this `ext4` partition * Prepare kernel modules being accessed while installation * Prepare a `vfat` disk partition * Only `vfat` fs module exists in CD's `initrd.gz`, * Copy module packages into this `vfat` partition | `pool/main/l/linux-signed-amd64/` | Description | | --------------------------------- | ----------- | | `ext4-modules-4.19.0-5-amd64-di_4.19.37-5_amd64.udeb` | ext4 file system for storing `.iso` image file | | `loop-modules-4.19.0-5-amd64-di_4.19.37-5_amd64.udeb` | loopback device for mounting `.iso` image file * Setup GRUB to enable boot from ISO file * Prepare `/boot/grub/device.map` * Correctly map `(hdX)` in GRUB and physical disks * <span style="background-color:lightblue">`grub-mkdevicemap`</span> * <span style="background-color:orange">`/boot/grub/device.map`</span> ``` (hd0) /dev/disk/by-id/ata-SanDisk_SD8SN8U256G1122_160908440972 (hd1) /dev/disk/by-id/ata-CT240BX200SSD1_1614F019EDFC (hd2) /dev/disk/by-id/ata-ST1000DM003-1CH162_Z1D5CDJA ``` * <span style="background-color:orange">`/etc/grub.d/40_custom`</span> ``` insmod part_msdos menuentry 'Debian install image' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-c4d18e61-2ff9-46b9-9a1d-e656c6318ce6' { set isofile="/iso/Linux/debian-buster-10.1.0-amd64/debian-10.1.0-amd64-BD-1.iso" insmod ext2 loopback loop (hd2,4)$isofile echo "Starting $isofile..." linux (loop)/install.amd/vmlinuz findiso=$isofile priority=low initrd (loop)/install.amd/initrd.gz } ``` Do not use `initrd.gz` from hd-media image, just use that in CD, since there * <span style="background-color:lightblue">`grub-install /dev/sdc`</span> * Booting * GRUB: <span style="background-color:lightgreen">Debian install image</span> * <span style="background-color:lightgreen">Alt-F2</span>: enter a console * <span style="background-color:lightblue">`mount -t vfat /dev/sdXY /mnt/custom/module`</span> * Install kernel modules * <span style="background-color:lightblue">`udpkg -i /mnt/custom/module/ext4-modules-4.19.0-5-amd64-di_4.19.37-5_amd64.udeb`</span> * <span style="background-color:lightblue">`udpkg -i /mnt/custom/module/loop-modules-4.19.0-5-amd64-di_4.19.37-5_amd64.udeb`</span> * <span style="background-color:lightblue">`depmod`</span> * <span style="background-color:lightblue">`modprobe ext4`</span> * <span style="background-color:lightblue">`mount -t ext4 /dev/sdXY /mnt/custom/iso`</span> * <span style="background-color:lightblue">`modprobe loop`</span> ## Install Debian Buster 10.1.0 amd64 * <span style="color:red">**Debian GNU/Linux UEFI Installer menu**</span> <span style="background-color:lightgreen">Install</span> * <span style="color:red">**[!!] Select a language**</span> Language: <span style="background-color:lightgreen">English</span> * <span style="color:red">**[!!] Select your location**</span> Country, territory or area: <span style="background-color:lightgreen">other</span> Continent or region: <span style="background-color:lightgreen">Asia</span> Country, territory or area: <span style="background-color:lightgreen">Taiwan</span> * <span style="color:red">**[!] Configure locales**</span> Country to base default locale settings on: <span style="background-color:lightgreen">United States</span> * <span style="color:red">**[!!] Configure the keyboard**</span> Keymap to use: <span style="background-color:lightgreen">American English</span> * <span style="color:red">**[!!] Configure the network**</span> Primary network interface: <span style="background-color:lightgreen">enp2s0f0: Intel Corporation 82576 Gigabit Network Connection</span> * <span style="color:red">**[!!] Configure the network**</span> <span style="color:blue">Network autoconfiguration failed</span> <span style="background-color:lightgreen">Continue</span> * <span style="color:red">**[!!] Configure the network**</span> Network configuration method: <span style="background-color:lightgreen">Configure network manually</span> IP address: <span style="background-color:lightgreen">10.0.0.2</span> Netmask: <span style="background-color:lightgreen">255.255.255.0</span> Gateway: <span style="background-color:lightgreen"></span> Name server addresses: <span style="background-color:lightgreen"></span> * <span style="color:red">**[!] Configure the network**</span> Hostname: <span style="background-color:lightgreen">vm-main</span> Domain name: <span style="background-color:lightgreen">local</span> * <span style="color:red">**[!!] Set up users and passwords**</span> Root password: <span style="background-color:lightgreen">\*\*\*\*\*\*\*\*</span> Re-enter password to verify: <span style="background-color:lightgreen">\*\*\*\*\*\*\*\*</span> Full name for the new user: <span style="background-color:lightgreen">sysadm</span> Username for your account: <span style="background-color:lightgreen">sysadm</span> Choose a password for the new user: <span style="background-color:lightgreen">\*\*\*\*\*\*\*\*</span> Re-enter password to verify: <span style="background-color:lightgreen">\*\*\*\*\*\*\*\*</span> * <span style="color:red">**[!!] Partition disks**</span> Force UEFI installation? <span style="background-color:lightgreen">No</span> * <span style="color:red">**[!!] Partition disks**</span> Partitioning method: <span style="background-color:lightgreen">Manual</span> ``` SCSI5 (0, 0, 0) (sdb) – 1.0 TB ATA ST1000DM010-2EP1 1.0 MB FREE SPACE #1 931.5 GB f btrfs /home 335.4 kB FREE SPACE SCSI5 (0, 0, 0) (sdc) – 256.1 GB ATA SanDisk SD8SN8U2 1.0 MB FREE SPACE #1 254.8 MB K biosgrub #2 2.0 GB f btrfs /boot #3 20.0 GB f btrfs / #4 233.8 GB f ext4 /var/lib/docker 335.4 kB FREE SPACE ``` <span style="background-color:lightgreen">Finish partitioning and write changes to disk</span> Write the changes to disks? <span style="background-color:lightgreen">Yes</span> * <span style="color:red">**[!] Configuring popularity-contest**</span> Participate in the package usage survey? <span style="background-color:lightgreen">No</span> * <span style="color:red">**[!] Software selection**</span> Choose software to install: <span style="background-color:lightgreen">[\*] Debian desktop environment</span> <span style="background-color:lightgreen">[\*] SSH server</span> <span style="background-color:lightgreen">[\*] standard system utilities</span> * <span style="color:red">**[!] Install the GRUB boot loader on a hard disk**</span> Install the GRUB boot loader to the master boot record? <span style="background-color:lightgreen">Yes</span> * <span style="color:red">**[!] Install the GRUB boot loader on a hard disk**</span> Device for boot loader installation: <span style="background-color:lightgreen">/dev/sda (ata-SanDisk_SD8SN8U256G1122_160908440972)</span> Force GRUB installation to the EFI removable media path? <span style="background-color:lightgreen">Yes</span> * <span style="color:red">**[!!] Finish the installation**</span> <span style="color:blue">Installation complete</span> <span style="background-color:lightgreen">Continue</span> ## Configure Xorg * **Install firmwares** * <span style="background-color:lightblue">`dmesg -S`</span> * `[drm:radeon_pci_probe [radeon]] *ERROR* radeon kernel modesetting for R600 or later requires firmware installed` * <span style="background-color:lightblue">`dpkg -i firmware-amd-graphics_20190114-2_all.deb`</span> * https://packages.debian.org/buster/all/firmware-amd-graphics/download * Non-free firmware for Radeon R600 driver * `/boot/initrd.img-4.19.0-6-amd64` is updated * No need to run <span style="background-color:lightblue">`grub-install /dev/sda`</span> since `initrd` is updated * **Configurations** | <span style="background-color:orange">`/etc/pam.d/gdm-password`</span> || | - | - | | `#auth required pam_succeed_if.so user != root quite_success` | Allow root login from GDM | | <span style="background-color:orange">`/etc/gdm3/greeter.dconf-defaults`</span> || | - | - | | `[org/gnome/login-screen]`<br/>`disable-user-list=true` | Do not list user accounts<br/>while login | | `[org/gnome/settings-daemon/plugins/power]`<br/>`sleep-inactive-ac-timeout=0`<br/>`sleep-inactive-ac-type='nothing'`<br/>`sleep-inactive-battery-timeout=0`<br/>`sleep-inactive-battery-type='nothing'`| Turn off power management | | `[org/gnome/desktop/screensaver]`<br/>`idle-activation-enabled=false` | Disable screen saver | * **Restart GDM** * <span style="background-color:lightblue">`/etc/init.d/gdm3 restart`</span> * **Configure clock** <span style="background-color:yellow">[Activities]</span> <span style="background-color:yellow">[Show Applications]</span> <span style="background-color:yellow">[Tweeks]</span> <span style="background-color:yellow">[Top Bar]</span> **Clock** Weekday <span style="background-color:lightgreen">ON</span> Date <span style="background-color:lightgreen">ON</span> Seconds <span style="background-color:lightgreen">ON</span> * ~~**Configure audio**~~ <span style="background-color:yellow">[Activities]</span> <span style="background-color:yellow">[Show Applications]</span> <span style="background-color:yellow">[Settings]</span> <span style="background-color:yellow">[Sound]</span> <span style="background-color:yellow">[Output]</span> Choose a device for sound output: <span style="background-color:lightgreen">RV620 HDMI Audio [Radeon HD 3400 Series] Digital Stereo (HDMI)</span> * ~~**Disable screen saver**~~ <span style="background-color:yellow">[Activities]</span> <span style="background-color:yellow">[Show Applications]</span> <span style="background-color:yellow">[dconf Editor]</span> <span style="background-color:yellow">[org.gnome.desktop.screensaver]</span> idle-activation-enabled: <span style="background-color:lightgreen">[ ]</span> ## User accounts | Account | Command | Comment | | ----------------- | ------- | ------- | | ~~**`backup`**~~ | <span style="background-color:lightblue">`smbpasswd -a backup`</span> | Used for system backups | | **`vm`** | <span style="background-color:lightblue">`adduser vm`</span> | Account for VM administration | | | <span style="background-color:lightblue">`addgroup vm backup`</span> | For accessing backup files | ## Network configuration * ~~**Install packages**~~ | <span style="background-color:lightblue">`apt-get install`</span> || | ---------------- | - | | **`resolvconf`** | | * **Configure network interfaces** * Configure `eno1` * <span style="background-color:orange">`/etc/systemd/network/eno1.network`</span> ``` [Match] Name=eno1 [Network] ``` * Configure `enp2s0f0` * <span style="background-color:orange">`/etc/systemd/network/mac1@enp2s0f0.netdev`</span> ``` [NetDev] Name=mac1@enp2s0f0 Kind=macvlan [MACVLAN] Mode=bridge ``` * <span style="background-color:orange">`/etc/systemd/network/mac1@enp2s0f0.network`</span> ``` [Match] Name=mac1@enp2s0f0 [Network] IPForward=yes Address=10.0.0.2/24 Gateway=10.0.0.1 ``` * <span style="background-color:orange">`/etc/systemd/network/enp2s0f0.network`</span> ``` [Match] Name=enp2s0f0 [Network] MACVLAN=mac1@enp2s0f0 ``` * Configure `enp2s0f1` * <span style="background-color:orange">`/etc/systemd/network/mac1@enp2s0f1.netdev`</span> ``` [NetDev] Name=mac1@enp2s0f1 Kind=macvlan [MACVLAN] Mode=bridge ``` * <span style="background-color:orange">`/etc/systemd/network/mac1@enp2s0f1.network`</span> ``` [Match] Name=mac1@enp2s0f1 [Network] IPForward=yes Address=172.16.0.2/24 ``` * <span style="background-color:orange">`/etc/systemd/network/enp2s0f1.network`</span> ``` [Match] Name=enp2s0f1 [Network] MACVLAN=mac1@enp2s0f1 ``` * **Modify services** * <span style="background-color:lightblue">`systemctl disable network-manager`</span> * <span style="background-color:lightblue">`systemctl enable systemd-networkd`</span> * ~~**Disable auto-configuration of eth devices (a.k.a. eth0)**~~ <span style="background-color:yellow">[Activities]</span> <span style="background-color:yellow">[Show Applications]</span> <span style="background-color:yellow">[Settings]</span> <span style="background-color:yellow">[Network]</span> Ethernet (eno1) <span style="background-color:lightgreen">[]</span> Ethernet (enp2s0f0) <span style="background-color:lightgreen">[]</span> Ethernet (enp2s0f1) <span style="background-color:lightgreen">[]</span> ## System configurations ### Mount points * **Install packages** | <span style="background-color:lightblue">`apt-get install`</span> || | ---------------- | -------------- | | **`cifs-utils`** | CIFS utilities | * **Create mount points** | <span style="background-color:lightblue">`mkdir -p`</span> || | --------------------- | ---------------- | | **`/mnt/TMGN`** | NAS server | | **`/mnt/debian/iso`<br/>`/mnt/debian/1`<br/>`/mnt/debian/2`<br/>`/mnt/debian/3`<br/>`/mnt/debian/4`** | Debian Buster BD ISO files | | **`/mnt/vm`** | Virtual machines | | **`/mnt/db`** | Databases | | **`/mnt/vcs`** | VCSes | | **`/mnt/www`** | WWW | | **`/mnt/VirtualBox`** | VirtualBox | * **Password file for accessing NAS** * <span style="background-color:orange">`/etc/cifs/TMGN.passwd` (chmod 600)</span> ``` username=******** password=******** ``` * **Mount table** * <span style="background-color:orange">`/etc/fstab`</span> ``` + //172.16.0.16/server/iso/Linux/debian-buster-10.1.0-amd64 /mnt/debian/iso cifs credentials=/etc/cifs/TMGN.passwd,ro 0 2 + //172.16.0.16/server/vm /mnt/vm cifs credentials=/etc/cifs/TMGN.passwd,uid=vm,gid=vm 0 2 + //172.16.0.16/server/db /mnt/db cifs credentials=/etc/cifs/TMGN.passwd,uid=www-data,gid=www-data,dir_mode=0775,file_mode=0664 0 2 + //172.16.0.16/server/vcs /mnt/vcs cifs credentials=/etc/cifs/TMGN.passwd,uid=www-data,gid=www-data 0 2 + //172.16.0.16/server/www /mnt/www cifs credentials=/etc/cifs/TMGN.passwd,uid=www-data,gid=www-data 0 2 + //172.16.0.16/server/vm/VirtualBox /mnt/VirtualBox cifs credentials=/etc/cifs/TMGN.passwd,uid=vm,gid=vm,fsc 0 2 + //172.16.0.16/server /mnt/TMGN cifs credentials=/etc/cifs/TMGN.passwd,uid=sysadm 0 2 + /mnt/debian/iso/debian-10.1.0-amd64-BD-1.iso /mnt/debian/1 iso9660 ro,loop 0 0 + /mnt/debian/iso/debian-10.1.0-amd64-BD-2.iso /mnt/debian/2 iso9660 ro,loop 0 0 + /mnt/debian/iso/debian-10.1.0-amd64-BD-3.iso /mnt/debian/3 iso9660 ro,loop 0 0 + /mnt/debian/iso/debian-10.1.0-amd64-BD-4.iso /mnt/debian/4 iso9660 ro,loop 0 0 ``` * **Remount all** * <span style="background-color:lightblue">`mount -a`</span> ### APT * <span style="background-color:orange">`/etc/apt/sources.list`</span> ``` # deb cdrom:[.....] + deb [trusted=yes] file:///mnt/debian/1/debian/ buster main contrib + deb [trusted=yes] file:///mnt/debian/2/debian/ buster main contrib + deb [trusted=yes] file:///mnt/debian/3/debian/ buster main contrib + deb [trusted=yes] file:///mnt/debian/4/debian/ buster main contrib # deb http://security.debian.org/ buster/updates main contrib # deb-src http://security.debian.org/ buster/updates main contrib ``` * <span style="background-color:lightblue">`apt-get update`</span> * **Install packages** | <span style="background-color:lightblue">`apt-get install`</span> || | ------------------- | - | | **`vim`** | | | **`zip`** | | | **`screen`** | | | **`smartmontools`** | | | **`net-tools`** | | | ~~**`aufs-tools`**~~ | | | ~~**`genisoimage`**~~ | | ### Software configurations * **sudo** | <span style="background-color:lightblue">`addgroup sysadm sudo`</span> | Allow administrator sudo | | - | - | * **vim** | <span style="background-color:orange">`/etc/vim/vimrc`</span> || | ---------------- | ----------------------- | | `syntax on` | Enable syntax highlight | | `set mouse=a` | Enable mouse auto copy | | + `set hlsearch` | Enable search highlight | * **ssh daemon** | <span style="background-color:orange">`/etc/ssh/sshd_config`</span> || | -------------------- | ----------------------------- | | `PermitRootLogin no` | Deny root login from SSH | | `UseDNS no` | Prevent waiting for SSH login | * **Kernel modules** | <span style="background-color:orange">`/etc/modprobe.d/loop.conf`</span> || | -------------------------- | ----------------------------------- | | `options loop max_loop=64` | Maximum number of loop devices = 64 | * **bash** | <span style="background-color:orange">`/root/.bashrc`</span> || | -------------------------- | ---------------------- | | `export LS_OPTIONS='--color=auto'`<br/>`eval $(dircolors)`<br/>`alias ls='ls $LS_OPTIONS'` | Show ls colors for root sh | | + `. /etc/bash_completion` | Enable bash completion | ## Generate SSL ROOT certificate ### Generate root certificate * Prepare `openssl.cnf` * Generate root private key `abinitiogo.key` * <span style="background-color:lightblue">`openssl genrsa -out private/abinitiogo.key 2048`</span> * chmod: 640 * Generate root certificate `abinitiogo.crt` * <span style="background-color:lightblue">`openssl req -new -sha512 -x509 -config openssl.cnf -key private/abinitiogo.key -out certs/abinitiogo.crt -days 7305`</span> Country Name (2 letter code): <span style="background-color:lightgreen">TW</span> State or Province Name (full name): <span style="background-color:lightgreen">Taiwan</span> Locality Name (eg, city): <span style="background-color:lightgreen">Taipei</span> Organization Name (eg, company): <span style="background-color:lightgreen">Ab Initio Go Organization</span> Organizational Unit Name (eg, section): <span style="background-color:lightgreen">Certificate</span> Common Name (e.g. server FQDN or YOUR name): <span style="background-color:lightgreen">abinitiogo.org</span> Email Address: <span style="background-color:lightgreen">cert@abinitiogo.org</span> * Prepare signing serial `abinitiogo.srl` * <span style="background-color:lightblue">`echo 01 > certs/abinitiogo.srl`</span> ### Install root certificate * Linux: Debian / Ubuntu * Install packages | <span style="background-color:lightblue">`apt-get install`</span> || | --------------------- | - | | **`ca-certificates`** | | * Obtain `abinitiogo.crt`, and put it in `/usr/local/share/ca-certificates/extra/` * <span style="background-color:lightblue">`update-ca-certificates`</span> ### Generate client certificate * At client side * Generate certificate private key `ssl-cert.key` * <span style="background-color:lightblue">`openssl genrsa -out private/ssl-cert.key 2048`</span> * chmod: 640 * Generate certificate request `xxxxx.csr` * <span style="background-color:lightblue">`openssl req -new -sha512 -config openssl.cnf -key private/ssl-cert.key -out reqs/xxxxx.csr`</span> * At server side * Obtain `xxxxx.csr` from client * Generate client certificate `xxxxx.pem` * <span style="background-color:lightblue">`openssl x509 -req -sha512 -extfile openssl.cnf -extensions v3_req -days 3652 -in reqs/xxxxx.csr -CA certs/abinitiogo.crt -CAkey private/abinitiogo.key -out certs/xxxxx.pem`</span> * Deliver `xxxxx.pem` to client ## Install Docker ### References https://docs.docker.com/install/linux/docker-ce/debian/ ### Install Docker engine * Install packages | <span style="background-color:lightblue">`apt-get install`</span> || | -------------------------------- | - | | **`apt-transport-https`** | | | **`curl`** | | | **`gnupg2`** | | | **`software-properties-common`** | | * Docker key * <span style="background-color:lightblue">`curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -`</span> * <span style="background-color:lightblue">`apt-key fingerprint 9DC858229FC7DD38854AE2D88D81803C0EBFCD88`</span> * Docker repository * <span style="background-color:orange">`/etc/apt/sources.list.d/docker.list`</span> ``` deb [arch=amd64] https://download.docker.com/linux/debian buster stable ``` * <span style="background-color:lightblue">`apt-get update`</span> * Install Docker engine | <span style="background-color:lightblue">`apt-get install`</span> | Version | | ------------------- | ----------------------------- | | **`docker-ce`** | `5:19.03.2~3-0~debian-buster` | | **`docker-ce-cli`** | `5:19.03.2~3-0~debian-buster` | | **`containerd.io`** | `1.2.6-3` | * Configurations * Enable user `vm` to access Docker * <span style="background-color:lightblue">`addgroup vm docker`</span> * Mount `/var/lib/docker` to a separate disk partition * Link volume space * <span style="background-color:lightblue">`ln -s /home/docker/volumes /var/lib/docker/volumes`</span> * Enable Docker service * <span style="background-color:lightblue">`systemctl enable docker`</span> * <span style="background-color:lightblue">`systemctl start docker`</span> ### Install `docker-compose` * Version 1.24.1 * <span style="background-color:lightblue">`curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose`</span> * <span style="background-color:lightblue">`chmod +x /usr/local/bin/docker-compose`</span> ### Configure Docker networks | Network | Command | | ------- | ------- | | eno1.docker-net<br/>eno1<br/>172.16.1.0/24 | <span style="background-color:lightblue">`docker network create --driver=macvlan --opt parent=eno1 --opt macvlan_mode=bridge --subnet=172.16.1.0/24 eno1.docker-net`</span> | | enp2s0f0.docker-net<br/>enp2s0f0<br/>10.0.0.0/24 | <span style="background-color:lightblue">`docker network create --driver=macvlan --opt parent=enp2s0f0 --opt macvlan_mode=bridge --subnet=10.0.0.0/24 --gateway=10.0.0.1 enp2s0f0.docker-net`</span> | | enp2s0f1.docker-net<br/>enp2s0f1<br/>172.16.0.0/24 | <span style="background-color:lightblue">`docker network create --driver=macvlan --opt parent=enp2s0f1 --opt macvlan_mode=bridge --subnet=172.16.0.0/24 --gateway=172.16.0.1 enp2s0f1.docker-net`</span> | | dmz.docker-net<br/>172.18.0.0/16 | <span style="background-color:lightblue">`docker network create --driver=bridge --opt com.docker.network.bridge.name=br-d-dmz --opt com.docker.network.bridge.enable_ip_masquerade=false --subnet=172.18.0.0/16 --gateway=172.18.0.1 dmz.docker-net`</span> | | adsl.docker-net<br/>192.168.255.0/29 | <span style="background-color:lightblue">`docker network create --driver=bridge --opt com.docker.network.bridge.name=br-d-adsl --opt com.docker.network.bridge.enable_ip_masquerade=false --subnet=192.168.255.0/29 --gateway=192.168.255.1 adsl.docker-net`</span> | | l2tpd.docker-net<br/>192.168.255.8/29 | <span style="background-color:lightblue">`docker network create --driver=bridge --opt com.docker.network.bridge.name=br-d-l2tpd --opt com.docker.network.bridge.enable_ip_masquerade=false --subnet=192.168.255.8/29 --gateway=192.168.255.9 l2tpd.docker-net`</span> | | pptpd.docker-net<br/>192.168.255.16/29 | <span style="background-color:lightblue">`docker network create --driver=bridge --opt com.docker.network.bridge.name=br-d-pptpd --opt com.docker.network.bridge.enable_ip_masquerade=false --subnet=192.168.255.16/29 --gateway=192.168.255.17 pptpd.docker-net`</span> | ### Setup boot * <span style="background-color:orange">`/etc/rc.local (chmod 755)`</span> ``` #!/bin/sh DOCKER_network_wait_ready() { network=$1 for i in 0 1 2; do for j in 0 1 2 3 4 5 6 7 8 9; do if docker network inspect $network > /dev/null; then return 0 fi sleep 1 done done return 1 } DOCKER_network_wait_ready dmz.docker-net || exit 1 ip addr del 172.18.0.1/16 dev br-d-dmz ip addr add 172.18.255.254/16 dev br-d-dmz DOCKER_network_wait_ready adsl.docker-net || exit 1 ip addr del 192.168.255.1/29 dev br-d-adsl DOCKER_network_wait_ready l2tpd.docker-net || exit 1 ip addr del 192.168.255.9/29 dev br-d-l2tpd DOCKER_network_wait_ready pptpd.docker-net || exit 1 ip addr del 192.168.255.17/29 dev br-d-pptpd (cd ~vm/docker/network && runuser -u vm -- docker-compose up -d) iptables -D DOCKER-ISOLATION-STAGE-1 -i br-d-dmz ! -o br-d-dmz -j DOCKER-ISOLATION-STAGE-2 ```