86 lines
2.7 KiB
Markdown
86 lines
2.7 KiB
Markdown
# auto-macvlan
|
|
|
|
Skrip untuk memasang **NIC macvlan** ke instance **Incus** dan mengaktifkan **DHCP di guest**, sehingga instance langsung mendapat IP di LAN (mis. `192.168.200.x`) — bukan IP NAT internal incus.
|
|
|
|
Cocok untuk instance yang perlu diakses langsung dari LAN (web, SSH, service yang di-publish podman/docker di dalamnya).
|
|
|
|
## Pemakaian
|
|
|
|
```bash
|
|
./incus-macvlan.sh <instance> [device] [network]
|
|
```
|
|
|
|
Contoh:
|
|
|
|
```bash
|
|
# pakai default: device eth1, network eth200
|
|
./incus-macvlan.sh web1
|
|
|
|
# tentukan device & network
|
|
./incus-macvlan.sh web1 eth1 eth200
|
|
|
|
# buat network macvlan bila belum ada
|
|
./incus-macvlan.sh web1 --create --parent enp2s0
|
|
```
|
|
|
|
## Opsi
|
|
|
|
| Opsi | Default | Keterangan |
|
|
|---|---|---|
|
|
| `--parent <iface>` | dari default route host | Interface fisik host untuk parent macvlan |
|
|
| `--network <name>` | `eth200` | Nama network macvlan di incus |
|
|
| `--device <name>` | `eth1` | Nama NIC di dalam guest |
|
|
| `--create` | mati | Buat network macvlan kalau belum ada |
|
|
| `-h, --help` | | Bantuan |
|
|
|
|
Argumen posisional: `$1` instance, `$2` device, `$3` network. Opsi mengalahkan posisional.
|
|
|
|
## Yang dilakukan
|
|
|
|
1. Cek instance ada dan berjalan (start bila perlu).
|
|
2. Pastikan network macvlan ada (buat dengan `--create` bila perlu).
|
|
3. Pasang NIC `nic network=<network> name=<device>` ke instance (hotplug).
|
|
4. Aktifkan DHCP di guest:
|
|
- **NetworkManager** → `nmcli`
|
|
- **systemd-networkd** → `/etc/systemd/network/20-<device>.network`
|
|
- fallback: `dhcpcd` / `dhclient` / `udhcpc`
|
|
5. Tunggu dan tampilkan IP LAN.
|
|
|
|
Idempotent — aman dijalankan ulang.
|
|
|
|
## Persiapan network macvlan (sekali)
|
|
|
|
```bash
|
|
incus network create eth200 --type=macvlan parent=enp2s0
|
|
```
|
|
|
|
Atau biarkan skrip membuatnya dengan `--create`.
|
|
|
|
## Syarat
|
|
|
|
- Host Incus punya NIC fisik yang terhubung ke LAN (parent, mis. `enp2s0`).
|
|
- **DHCP server di LAN** aktif (IP instance berasal dari router LAN, bukan incus).
|
|
- Guest punya salah satu DHCP client di atas.
|
|
|
|
## Catatan penting
|
|
|
|
- **Host Incus tidak bisa menghubungi instance lewat IP LAN macvlan** (batasan macvlan). Dari host, kelola lewat `incus exec`; instance tetap bisa diakses dari perangkat LAN lain.
|
|
- Bila instance punya **dua NIC** (incusbr0 + macvlan) dan default route dari incusbr0 menang, balasan ke LAN bisa keluar lewat NIC yang salah. Solusi: jadikan macvlan default dengan metrik lebih rendah, mis.:
|
|
|
|
```ini
|
|
# /etc/systemd/network/20-eth1.network
|
|
[Match]
|
|
Name=eth1
|
|
[Network]
|
|
DHCP=yes
|
|
[DHCPv4]
|
|
RouteMetric=50
|
|
```
|
|
|
|
atau nonaktifkan NIC incusbr0 bila tidak diperlukan.
|
|
- IP yang didapat dinamis dari LAN. Kalau butuh statis, atur DHCP reservation di router atau konfigurasi statis di guest.
|
|
|
|
## Lisensi
|
|
|
|
MIT — lihat [LICENSE](LICENSE).
|