feat(rego-tunnel): optional shared network via NIC2
Some checks failed
Test / test (push) Has been cancelled
Some checks failed
Test / test (push) Has been cancelled
This commit is contained in:
@@ -21,6 +21,7 @@ TARGET_IP="${TARGET_IP:-10.35.33.230}"
|
||||
BRIDGE2_NAME="${BRIDGE2_NAME:-}"
|
||||
TAP2_NAME="${TAP2_NAME:-}"
|
||||
BRIDGE2_CIDR="${BRIDGE2_CIDR:-}"
|
||||
BRIDGE2_UPLINK_IF="${BRIDGE2_UPLINK_IF:-}"
|
||||
|
||||
if [[ "$BRIDGE_CIDR" != */* ]]; then
|
||||
BRIDGE_CIDR="$BRIDGE_CIDR/24"
|
||||
@@ -60,23 +61,58 @@ if [ -n "$BRIDGE2_NAME" ] || [ -n "$TAP2_NAME" ]; then
|
||||
if [ -z "$BRIDGE2_NAME" ] || [ -z "$TAP2_NAME" ]; then
|
||||
echo "[rego-tunnel] WARN: BRIDGE2_NAME and TAP2_NAME must both be set to enable the second bridge"
|
||||
else
|
||||
# Optionally bridge an existing container uplink into BRIDGE2 (e.g. eth0/eth1)
|
||||
# so the VM NIC shares the same L2 network as that uplink.
|
||||
if [ -n "$BRIDGE2_UPLINK_IF" ]; then
|
||||
if ! ip link show "$BRIDGE2_UPLINK_IF" &>/dev/null; then
|
||||
echo "[rego-tunnel] WARN: BRIDGE2_UPLINK_IF=$BRIDGE2_UPLINK_IF not found; skipping uplink bridging"
|
||||
BRIDGE2_UPLINK_IF=""
|
||||
fi
|
||||
fi
|
||||
|
||||
if ! ip link show "$BRIDGE2_NAME" &>/dev/null; then
|
||||
ip link add "$BRIDGE2_NAME" type bridge
|
||||
fi
|
||||
if [ -n "$BRIDGE2_CIDR" ]; then
|
||||
if [[ "$BRIDGE2_CIDR" != */* ]]; then
|
||||
BRIDGE2_CIDR="$BRIDGE2_CIDR/24"
|
||||
fi
|
||||
ip addr show dev "$BRIDGE2_NAME" | grep -qF "$BRIDGE2_CIDR" || ip addr add "$BRIDGE2_CIDR" dev "$BRIDGE2_NAME" 2>/dev/null || true
|
||||
fi
|
||||
ip link set "$BRIDGE2_NAME" up
|
||||
|
||||
# If an uplink interface is provided, move its IPv4 address to the bridge.
|
||||
# This keeps the container reachable on that network while allowing the VM
|
||||
# to participate in the same L2 broadcast domain.
|
||||
if [ -n "$BRIDGE2_UPLINK_IF" ]; then
|
||||
UPLINK_CIDR="$(ip -o -4 addr show dev "$BRIDGE2_UPLINK_IF" 2>/dev/null | awk '{print $4}' | head -n1)"
|
||||
UPLINK_DEFAULT_GW="$(ip route show default dev "$BRIDGE2_UPLINK_IF" 2>/dev/null | awk '{print $3}' | head -n1)"
|
||||
UPLINK_DEFAULT_METRIC="$(ip route show default dev "$BRIDGE2_UPLINK_IF" 2>/dev/null | awk '{for(i=1;i<=NF;i++) if($i=="metric"){print $(i+1); exit}}')"
|
||||
if [ -z "$BRIDGE2_CIDR" ] && [ -n "$UPLINK_CIDR" ]; then
|
||||
BRIDGE2_CIDR="$UPLINK_CIDR"
|
||||
fi
|
||||
if [ -n "$BRIDGE2_CIDR" ]; then
|
||||
if [[ "$BRIDGE2_CIDR" != */* ]]; then
|
||||
BRIDGE2_CIDR="$BRIDGE2_CIDR/24"
|
||||
fi
|
||||
ip addr show dev "$BRIDGE2_NAME" | grep -qF "$BRIDGE2_CIDR" || ip addr add "$BRIDGE2_CIDR" dev "$BRIDGE2_NAME" 2>/dev/null || true
|
||||
fi
|
||||
# Remove IP from uplink and enslave it into the bridge
|
||||
ip addr flush dev "$BRIDGE2_UPLINK_IF" 2>/dev/null || true
|
||||
ip link set "$BRIDGE2_UPLINK_IF" master "$BRIDGE2_NAME" 2>/dev/null || true
|
||||
ip link set "$BRIDGE2_UPLINK_IF" up 2>/dev/null || true
|
||||
|
||||
# If the uplink carried the container default route, it may have been removed
|
||||
# by the address flush. Restore it on the bridge.
|
||||
if [ -n "$UPLINK_DEFAULT_GW" ]; then
|
||||
if ip route show default 2>/dev/null | grep -q '^default '; then
|
||||
ip route replace default via "$UPLINK_DEFAULT_GW" dev "$BRIDGE2_NAME" ${UPLINK_DEFAULT_METRIC:+metric "$UPLINK_DEFAULT_METRIC"} 2>/dev/null || true
|
||||
else
|
||||
ip route add default via "$UPLINK_DEFAULT_GW" dev "$BRIDGE2_NAME" ${UPLINK_DEFAULT_METRIC:+metric "$UPLINK_DEFAULT_METRIC"} 2>/dev/null || true
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if ! ip link show "$TAP2_NAME" &>/dev/null; then
|
||||
ip tuntap add "$TAP2_NAME" mode tap
|
||||
fi
|
||||
ip link set "$TAP2_NAME" master "$BRIDGE2_NAME" 2>/dev/null || true
|
||||
ip link set "$TAP2_NAME" up
|
||||
echo "[rego-tunnel] Second bridge enabled: $BRIDGE2_NAME (tap $TAP2_NAME)"
|
||||
echo "[rego-tunnel] Second bridge enabled: $BRIDGE2_NAME (tap $TAP2_NAME)${BRIDGE2_UPLINK_IF:+ uplink $BRIDGE2_UPLINK_IF}"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
Reference in New Issue
Block a user