[Series] [Part 3] Homelab – Wifi Gateway

192.168.1.3

UDM SE

Vì sao là SE mà không là PRO. SE và PRO cơ bản same hardware nhưng SE có PoE, vậy không adapter riêng cho AP nữa, mà cắm thẳng vào Gateway luôn

Về cơ bản IP 192.168.1.3 được cấp cho UDM SE như 1 WAN IP, vì phía sau UDM SE là các lớp mạng khác hoàn toàn / DHCP riêng. Đây thật sự mà nói không phải diều mình expect ! Nó nên như 1 “switch” thôi. DHCP từ Router hoặc Switch cấp. !

Hiện tại em nó dùng 4 VLAN Tag tương tự router với 4 SSID Wifi cho các mục đích dùng khác nhau.

Về lý thuyết nếu UDM SE cấp DHCP nghĩa là router sẽ không phải gánh việc này. Và IP duy nhất mà Router hiểu là `192.168.1.3`

Và tất nhiên em nó cũng sẽ bắn syslog về cho gatekeeper

[Series] [Part 2] Homelab – Core Switch

192.168.1.2

CnMatrix 2028-P

Về nguyên tắc em nó Core Switch và mình expect

  • 100% DHCP server trên em nó

Tuy nhiên do hạn chế kĩ thuật và cũng như hardware ( em nó chỉ có port 1Gbps & 4 ports 10Gbps – Không có port 2.5Gbps ) nên chưa 100% tuyệt đối mọi devices dều cắm trên nó. Con Workstation port 2.5Gbps vẫn cắm trực tiếp vào router, cho đến khi mình thay vào port 10Gbps thì sẽ bỏ hẳn ra.

Cũng như setup DHCP / VLAN trên Core Switch & routing ( trên router ). v..v với từng IP trên cũng chưa làm được 🙁 Mọi thứ còn nằm trên Router.

Ah em 2028-P này được cái được support cloud control nên khoẻ. Ở ngoài cũng có thể dễ dàng access làm ăn. Chỉ là … dek biết làm gì :v

[Series] Homelab

Bài viết này viết về homelab cơ bản mình đang sử dụng. Vẫn còn cần nhiều improve, tuy nhiên do 1 số hạn chế kiến thức nên vẫn chưa được đầy đủ.

Diagram

https://lucid.app/lucidchart/af457311-6e50-4e83-9249-80f7df36b249/edit?viewport_loc=-98%2C102%2C2083%2C1334%2C0_0&invitationId=inv_1a10f138-8d09-4814-b475-f15a1d1c316a

Homelab diagram
Continue reading [Series] Homelab

Ubuntu install Grafana

sudo apt-get install -y apt-transport-https software-properties-common wget

sudo mkdir -p /etc/apt/keyrings/

wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null

echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

# Updates the list of available packages
sudo apt-get update

# Installs the latest Enterprise release:
sudo apt-get install grafana-enterprise

Prometheus

#!/bin/bash

echo 'Create tmp dir'
mkdir -p /tmp/prometheus

echo 'Change directory'
cd /tmp/prometheus

echo 'Download Prometheus'
PROMETHEUS_VERSION=$(curl -Ls https://api.github.com/repos/prometheus/prometheus/releases/latest | jq ".tag_name" | xargs | cut -c2-)
wget "https://github.com/prometheus/prometheus/releases/download/v${PROMETHEUS_VERSION}/prometheus-${VERSION}.linux-amd64.tar.gz"
tar xvzf prometheus-${VERSION}.linux-amd64.tar.gz
cd ./prometheus-${VERSION}.linux-amd64

echo 'Create directories'
for i in rules rules.d files_sd; do sudo mkdir -p /etc/prometheus/${i}; done
sudo mkdir /var/lib/prometheus

echo 'Create user & group'
sudo groupadd --system prometheus
sudo useradd -s /sbin/nologin --no-create-home --system -g prometheus prometheus

echo 'Deploy'
sudo mv prometheus promtool /usr/local/bin/
sudo mv prometheus.yml /etc/prometheus/prometheus.yml
sudo mv consoles/ console_libraries/ /etc/prometheus/

echo 'Chown'
sudo chown -R prometheus:prometheus /usr/local/bin/prometheus
sudo chown -R prometheus:prometheus /usr/local/bin/promtool
sudo chown -R prometheus:prometheus /etc/prometheus
sudo chown -R prometheus:prometheus /var/lib/prometheus

echo 'Create service'
sudo tee /etc/systemd/system/prometheus.service<<EOF
[Unit]
Description=Prometheus
Documentation=https://prometheus.io/docs/introduction/overview/
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=prometheus
Group=prometheus
ExecReload=/bin/kill -HUP \$MAINPID
ExecStart=/usr/local/bin/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.path=/var/lib/prometheus \
  --web.console.templates=/etc/prometheus/consoles \
  --web.console.libraries=/etc/prometheus/console_libraries \
  --web.listen-address=0.0.0.0:9090 \
  --web.external-url=

SyslogIdentifier=prometheus
Restart=always

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus

Fully installation of Development server

After OS installed we have update it to latest

sudo apt update && sudo apt upgrade -y

LVM resize

sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

Timezone

sudo timedatectl set-timezone Asia/Ho_Chi_Minh
sudo timedatectl set-ntp on

Setup sudo without password

sudo echo "joos ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers

Disable IPv6

I don’t know why but sometime it blocked internet access to some of servers

sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=1

Install PHP

sudo apt install -y software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update && sudo apt upgrade -y

phpVersions=('8.3')
phpExtensions=('dev' 'cli' 'mbstring' 'curl' 'intl' 'mbstring' 'xml' 'xmlrpc' 'xsl' 'yaml' 'zip' 'imagick' 'gd' 'opcache' 'memcache' 'memcached' 'mysql' 'sqlite3' 'ldap' 'bcmath' 'fpm' 'mongodb' 'redis' 'pcov' 'apcu')

for phpVersion in "${phpVersions[@]}"
do
  echo "Install PHP ${phpVersion} extensions"
  extensions=$(printf "php${phpVersion}-%s " "${phpExtensions[@]}")
  sudo apt install -y $extensions
done

sudo apt update
sudo apt install php-cli unzip zip

Composer

cd ~
curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php
sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer

Docker

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Docket without sudo

sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
Continue reading Fully installation of Development server

LVM – Installation

sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

sudo timedatectl set-timezone Asia/Ho_Chi_Minh
sudo timedatectl set-ntp on
joos ALL=(ALL) NOPASSWD:ALL
sudo groupadd --system prometheus
sudo useradd -s /sbin/nologin --no-create-home --system -g prometheus prometheus

MySQL Exporter

Configure Prometheus MySQL Exporter on Ubuntu / CentOS | ComputingForGeeks

Install and Configure Prometheus MySQL Exporter – DevOpsSchool.com

IPv6 – Disable

sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=1

Secure SSH with Yubikey

https://developers.yubico.com/SSH/Securing_SSH_with_FIDO2.html
  • Install OpenSSH
  • ssh-keygen -t ed25519-sk -O resident -O verify-required -C "Your Comment"

– t : Specifies the type of key to create. We are using ed25519-sk

– 0 : Specify a key/value option.

resident : Indicate that the key handle should be stored on the FIDO authenticator itself.

verify-required : Indicate that this private key should require user verification for each signature.

  • Copy public key ssh-copy-id -i ~/.ssh/id_ed25519_sk.pub user@host
  • And finally update SSH server
# Support public key cryptography (includes FIDO2)
PubkeyAuthentication yes
# Enforce User Verification
PubkeyAuthOptions verify-required
# Public keys location
AuthorizedKeysFile .ssh/authorized_keys
# Allow root only with MFA
PermitRootLogin prohibit-password
# Disable password authentication
PasswordAuthentication no
PermitEmptyPasswords no