feat: IPv6 support (#933)

This commit is contained in:
Kroese 2025-03-18 03:59:58 +01:00 committed by GitHub
parent 36d3fca4fc
commit a8e4647fa6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 43 additions and 10 deletions

View File

@ -72,7 +72,7 @@ kubectl apply -f https://raw.githubusercontent.com/vdsm/virtual-dsm/refs/heads/m
Very simple! These are the steps: Very simple! These are the steps:
- Start the container and connect to [port 5000](http://localhost:5000) using your web browser. - Start the container and connect to [port 5000](http://127.0.0.1:5000/) using your web browser.
- Wait until DSM finishes its installation - Wait until DSM finishes its installation

View File

@ -119,6 +119,12 @@ configureDNS() {
DNSMASQ_OPTS=$(echo "$DNSMASQ_OPTS" | sed 's/\t/ /g' | tr -s ' ' | sed 's/^ *//') DNSMASQ_OPTS=$(echo "$DNSMASQ_OPTS" | sed 's/\t/ /g' | tr -s ' ' | sed 's/^ *//')
if [[ "${DEBUG_DNS:-}" == [Yy1]* ]]; then
DNSMASQ_OPTS+=" -d"
$DNSMASQ ${DNSMASQ_OPTS:+ $DNSMASQ_OPTS} &
return 0
fi
if ! $DNSMASQ ${DNSMASQ_OPTS:+ $DNSMASQ_OPTS}; then if ! $DNSMASQ ${DNSMASQ_OPTS:+ $DNSMASQ_OPTS}; then
error "Failed to start dnsmasq, reason: $?" && return 1 error "Failed to start dnsmasq, reason: $?" && return 1
fi fi
@ -206,7 +212,7 @@ configureNAT() {
fi fi
if ! ip address add "${VM_NET_IP%.*}.1/24" broadcast "${VM_NET_IP%.*}.255" dev dockerbridge; then if ! ip address add "${VM_NET_IP%.*}.1/24" broadcast "${VM_NET_IP%.*}.255" dev dockerbridge; then
error "Failed to add IP address!" && return 1 error "Failed to add IP address pool!" && return 1
fi fi
while ! ip link set dockerbridge up; do while ! ip link set dockerbridge up; do
@ -398,8 +404,16 @@ getInfo() {
error "Invalid MAC address: '$VM_NET_MAC', should be 12 or 17 digits long!" && exit 28 error "Invalid MAC address: '$VM_NET_MAC', should be 12 or 17 digits long!" && exit 28
fi fi
GATEWAY=$(ip route list dev "$VM_NET_DEV" | awk ' /^default/ {print $3}') GATEWAY=$(ip route list dev "$VM_NET_DEV" | awk ' /^default/ {print $3}' | head -n 1)
IP=$(ip address show dev "$VM_NET_DEV" | grep inet | awk '/inet / { print $2 }' | cut -f1 -d/) IP=$(ip address show dev "$VM_NET_DEV" | grep inet | awk '/inet / { print $2 }' | cut -f1 -d/ | head -n 1)
IP6=""
# shellcheck disable=SC2143
if [ -f /proc/net/if_inet6 ] && [ -n "$(ifconfig -a | grep inet6)" ]; then
IP6=$(ip -6 addr show dev "$VM_NET_DEV" scope global up)
[ -n "$IP6" ] && IP6=$(echo "$IP6" | sed -e's/^.*inet6 \([^ ]*\)\/.*$/\1/;t;d' | head -n 1)
fi
echo "$IP" > /run/shm/qemu.ip echo "$IP" > /run/shm/qemu.ip
return 0 return 0
@ -466,7 +480,7 @@ else
closeBridge closeBridge
NETWORK="user" NETWORK="user"
warn "falling back to usermode networking! Performance will be bad and port mapping will not work." warn "falling back to user-mode networking! Performance will be bad and port mapping will not work."
fi fi
@ -474,7 +488,7 @@ else
if [[ "${NETWORK,,}" == "user"* ]]; then if [[ "${NETWORK,,}" == "user"* ]]; then
# Configure for usermode networking (slirp) # Configure for user-mode networking (slirp)
configureUser || exit 24 configureUser || exit 24
fi fi

View File

@ -68,6 +68,12 @@ CPU="${CPU// 8 Core/}"
CPU="${CPU// 16 Core/}" CPU="${CPU// 16 Core/}"
CPU="${CPU// 32 Core/}" CPU="${CPU// 32 Core/}"
CPU="${CPU// 64 Core/}" CPU="${CPU// 64 Core/}"
CPU="${CPU//10th Gen /}"
CPU="${CPU//11th Gen /}"
CPU="${CPU//12th Gen /}"
CPU="${CPU//13th Gen /}"
CPU="${CPU//14th Gen /}"
CPU="${CPU//15th Gen /}"
CPU="${CPU// Processor/}" CPU="${CPU// Processor/}"
CPU="${CPU// Quad core/}" CPU="${CPU// Quad core/}"
CPU="${CPU// Core TM/ Core}" CPU="${CPU// Core TM/ Core}"
@ -320,6 +326,19 @@ addPackage() {
return 0 return 0
} }
# shellcheck disable=SC2143
if [ -f /proc/net/if_inet6 ] && [ -n "$(ifconfig -a | grep inet6)" ]; then
sed -i "s/listen 80;/listen [::]:80 ipv6only=off;/g" /etc/nginx/sites-enabled/web.conf
sed -i "s/listen 5000 default_server;/listen [::]:5000 default_server ipv6only=off;/g" /etc/nginx/sites-enabled/web.conf
else
sed -i "s/listen [::]:80 ipv6only=off;/listen 80;/g" /etc/nginx/sites-enabled/web.conf
sed -i "s/listen [::]:5000 default_server ipv6only=off;/listen 5000 default_server;/g" /etc/nginx/sites-enabled/web.conf
fi
# Start webserver # Start webserver
cp -r /var/www/* /run/shm cp -r /var/www/* /run/shm
html "Starting $APP for Docker..." html "Starting $APP for Docker..."