Add outbound NAT for internal vmbr1 so LXCs reach the internet
This commit is contained in:
parent
29e38361c8
commit
5fcf1f62e9
1 changed files with 29 additions and 3 deletions
|
|
@ -59,16 +59,41 @@ detect_storage() {
|
|||
}
|
||||
STORAGE=$(detect_storage)
|
||||
|
||||
# ── Check vmbr1 internal bridge ───────────────────────────────────────────────
|
||||
# ── Internal network: bridge + NAT ────────────────────────────────────────────
|
||||
# The isolated vmbr1 needs outbound NAT so LXCs can apt-install Docker, git
|
||||
# clone, and pull images. Persisted via an if-up.d hook so it survives reboot.
|
||||
ensure_nat() {
|
||||
local wan; wan=$(ip route show default 2>/dev/null | awk '{print $5; exit}'); wan=${wan:-vmbr0}
|
||||
msg_info "Enabling internal NAT (10.10.10.0/24 → ${wan})"
|
||||
sysctl -wq net.ipv4.ip_forward=1 2>/dev/null || echo 1 > /proc/sys/net/ipv4/ip_forward
|
||||
echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/99-hotel-manage.conf
|
||||
iptables -t nat -C POSTROUTING -s 10.10.10.0/24 ! -d 10.10.10.0/24 -o "$wan" -j MASQUERADE 2>/dev/null \
|
||||
|| iptables -t nat -A POSTROUTING -s 10.10.10.0/24 ! -d 10.10.10.0/24 -o "$wan" -j MASQUERADE
|
||||
cat > /etc/network/if-up.d/hotel-manage-nat <<'HOOK'
|
||||
#!/bin/sh
|
||||
[ "$IFACE" = "vmbr1" ] || exit 0
|
||||
WAN=$(ip route show default | awk '{print $5; exit}'); WAN=${WAN:-vmbr0}
|
||||
sysctl -w net.ipv4.ip_forward=1 >/dev/null 2>&1
|
||||
iptables -t nat -C POSTROUTING -s 10.10.10.0/24 ! -d 10.10.10.0/24 -o "$WAN" -j MASQUERADE 2>/dev/null \
|
||||
|| iptables -t nat -A POSTROUTING -s 10.10.10.0/24 ! -d 10.10.10.0/24 -o "$WAN" -j MASQUERADE
|
||||
HOOK
|
||||
chmod +x /etc/network/if-up.d/hotel-manage-nat
|
||||
msg_ok "Internal NAT enabled (via ${wan})"
|
||||
}
|
||||
|
||||
check_vmbr1() {
|
||||
ip link show vmbr1 &>/dev/null && return # already present
|
||||
if ip link show vmbr1 &>/dev/null; then
|
||||
ensure_nat # bridge exists — make sure NAT/forwarding is in place
|
||||
return
|
||||
fi
|
||||
|
||||
if whiptail --title "Create internal bridge vmbr1?" --yesno \
|
||||
"The internal container bridge vmbr1 (10.10.10.1/24) doesn't exist yet.
|
||||
|
||||
Create it now? This adds an ISOLATED bridge with no physical ports,
|
||||
so it cannot affect your LAN or vmbr0. It appends a stanza to
|
||||
/etc/network/interfaces and applies it with ifreload -a." 14 68; then
|
||||
/etc/network/interfaces, applies it with ifreload -a, and enables
|
||||
outbound NAT so the containers can reach the internet." 15 68; then
|
||||
|
||||
if grep -qE '^\s*iface\s+vmbr1' /etc/network/interfaces 2>/dev/null; then
|
||||
msg_warn "vmbr1 already defined in /etc/network/interfaces — applying it"
|
||||
|
|
@ -91,6 +116,7 @@ EOF
|
|||
else
|
||||
msg_error "vmbr1 still not up — check /etc/network/interfaces and re-run"
|
||||
fi
|
||||
ensure_nat
|
||||
else
|
||||
whiptail --title "vmbr1 Missing" --msgbox \
|
||||
"Cancelled. Add this to /etc/network/interfaces, run 'ifreload -a',
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue