docker: add routing when shim network is used

This commit is contained in:
bergware
2023-08-22 13:13:07 +02:00
parent f5083b3e58
commit 3a60e081c7
+3 -8
View File
@@ -440,9 +440,9 @@ start_network(){
fi
done
# hack to let containers talk to host
GW=$(ip -4 route show default dev $NETWORK|awk '{print $3;exit}')
if [[ $TYPE == br ]]; then
LINK=shim-$NETWORK
GW=$(ip -4 route show default dev $NETWORK|awk '{print $3;exit}')
if [[ $DOCKER_ALLOW_ACCESS == yes && (-n $IPV4 || -n $IPV6) ]]; then
# create shim interface with predefined MAC address and copy server IPv4/IPv6 addresses to shim interface
MAC=$(echo $(hostname)-$NETWORK|md5sum|sed -r 's/^(..)(..)(..)(..)(..).*$/02:\1:\2:\3:\4:\5/')
@@ -466,11 +466,9 @@ start_network(){
# copy server IPv4/IPv6 address to vhost interface
[[ -n $IPV4 ]] && ip -4 addr add $IPV4 dev $VHOST metric 0
[[ -n $IPV6 ]] && ip -6 addr add $IPV6 dev $VHOST metric 1
[[ -n $GW ]] && ip -4 route add default via $GW dev $VHOST metric 0
logger -t $(basename $0) "prepared network $VHOST for host access"
elif [[ -e $SYSTEM/$VHOST ]]; then
# remove IP addresses
[[ -n $GW ]] && ip -4 route del default via $GW dev $VHOST
ip addr flush dev $VHOST
fi
fi
@@ -490,9 +488,9 @@ stop_network(){
for NETWORK in $(network $ATTACH ${NIC//[^0-9]/}); do
[[ $STOCK =~ ${NETWORK%%[0-9]*} || $DOCKER_USER_NETWORKS != preserve ]] && docker network rm $NETWORK >/dev/null
TYPE=${NETWORK//[0-9.]/}
GW=$(ip -4 route show default dev $NETWORK|awk '{print $3;exit}')
if [[ $TYPE == br ]]; then
LINK=shim-$NETWORK
GW=$(ip -4 route show default dev $NETWORK|awk '{print $3;exit}')
if [[ -e $SYSTEM/$LINK ]]; then
[[ -n $GW ]] && ip -4 route del default via $GW dev $LINK
ip addr flush dev $LINK
@@ -501,10 +499,7 @@ stop_network(){
fi
else
VHOST=vhost${NETWORK//[^0-9.]/}
if [[ -e $SYSTEM/$VHOST ]]; then
[[ -n $GW ]] && ip -4 route del default via $GW dev $VHOST
ip addr flush dev $VHOST
fi
[[ -e $SYSTEM/$VHOST ]] && ip addr flush dev $VHOST
fi
done
done