Skip to content

Commit 666b603

Browse files
committed
feat: support wsl2 mirrored networking mode
1 parent 9acc7f2 commit 666b603

File tree

4 files changed

+45
-30
lines changed

4 files changed

+45
-30
lines changed

distro/alpine.dockerfile

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
FROM docker.io/library/alpine:3.17.2 as gvisor-tap-vsock
22
WORKDIR /app/bin
3-
RUN wget https://github.com/containers/gvisor-tap-vsock/releases/download/v0.6.1/gvproxy-windows.exe && \
4-
wget https://github.com/containers/gvisor-tap-vsock/releases/download/v0.6.1/vm && \
5-
chmod +x ./gvproxy-windows.exe ./vm
3+
RUN wget https://github.com/containers/gvisor-tap-vsock/releases/download/v0.7.3/gvproxy-windows.exe && \
4+
wget https://github.com/containers/gvisor-tap-vsock/releases/download/v0.7.3/gvforwarder && \
5+
chmod +x ./gvproxy-windows.exe ./gvforwarder
66
RUN find . -type f -exec sha256sum {} \;
77

88
FROM docker.io/library/alpine:3.17.2
@@ -12,7 +12,7 @@ RUN apk update && \
1212
apk list --installed && \
1313
rm -rf /var/cache/apk/*
1414
WORKDIR /app
15-
COPY --from=gvisor-tap-vsock /app/bin/vm ./wsl-vm
15+
COPY --from=gvisor-tap-vsock /app/bin/gvforwarder ./wsl-vm
1616
COPY --from=gvisor-tap-vsock /app/bin/gvproxy-windows.exe ./wsl-gvproxy.exe
1717
COPY ./wsl-vpnkit ./wsl-vpnkit.service ./
1818
COPY ./distro/wsl.conf /etc/wsl.conf

distro/fedora.dockerfile

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
FROM docker.io/library/alpine:3.17.2 as gvisor-tap-vsock
22
WORKDIR /app/bin
3-
RUN wget https://github.com/containers/gvisor-tap-vsock/releases/download/v0.6.1/gvproxy-windows.exe && \
4-
wget https://github.com/containers/gvisor-tap-vsock/releases/download/v0.6.1/vm && \
5-
chmod +x ./gvproxy-windows.exe ./vm
3+
RUN wget https://github.com/containers/gvisor-tap-vsock/releases/download/v0.7.3/gvproxy-windows.exe && \
4+
wget https://github.com/containers/gvisor-tap-vsock/releases/download/v0.7.3/gvforwarder && \
5+
chmod +x ./gvproxy-windows.exe ./gvforwarder
66
RUN find . -type f -exec sha256sum {} \;
77

88
FROM docker.io/library/fedora:37
99
RUN dnf upgrade -y && \
1010
dnf install -y iproute iptables-legacy iputils bind-utils wget && \
1111
dnf clean all
1212
WORKDIR /app
13-
COPY --from=gvisor-tap-vsock /app/bin/vm ./wsl-vm
13+
COPY --from=gvisor-tap-vsock /app/bin/gvforwarder ./wsl-vm
1414
COPY --from=gvisor-tap-vsock /app/bin/gvproxy-windows.exe ./wsl-gvproxy.exe
1515
COPY ./wsl-vpnkit ./wsl-vpnkit.service ./
1616
COPY ./distro/wsl.conf /etc/wsl.conf

distro/ubuntu.dockerfile

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
FROM docker.io/library/alpine:3.17.2 as gvisor-tap-vsock
22
WORKDIR /app/bin
3-
RUN wget https://github.com/containers/gvisor-tap-vsock/releases/download/v0.6.1/gvproxy-windows.exe && \
4-
wget https://github.com/containers/gvisor-tap-vsock/releases/download/v0.6.1/vm && \
5-
chmod +x ./gvproxy-windows.exe ./vm
3+
RUN wget https://github.com/containers/gvisor-tap-vsock/releases/download/v0.7.3/gvproxy-windows.exe && \
4+
wget https://github.com/containers/gvisor-tap-vsock/releases/download/v0.7.3/gvforwarder && \
5+
chmod +x ./gvproxy-windows.exe ./gvforwarder
66
RUN find . -type f -exec sha256sum {} \;
77

88
FROM docker.io/library/ubuntu:22.04
@@ -11,7 +11,7 @@ RUN apt-get update && \
1111
apt-get install -y iproute2 iptables iputils-ping dnsutils wget && \
1212
apt-get clean
1313
WORKDIR /app
14-
COPY --from=gvisor-tap-vsock /app/bin/vm ./wsl-vm
14+
COPY --from=gvisor-tap-vsock /app/bin/gvforwarder ./wsl-vm
1515
COPY --from=gvisor-tap-vsock /app/bin/gvproxy-windows.exe ./wsl-gvproxy.exe
1616
COPY ./wsl-vpnkit ./wsl-vpnkit.service ./
1717
COPY ./distro/wsl.conf /etc/wsl.conf

wsl-vpnkit

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ TAP_MAC_ADDR=${TAP_MAC_ADDR:-5a:94:ef:e4:0c:ee}
1010

1111
# overrideable with env
1212
VMEXEC_PATH=${VMEXEC_PATH:-/app/wsl-vm}
13-
GVPROXY_PATH=${GVPROXY_PATH:-/app/wsl-gvproxy.exe}
13+
GVPROXY_PATH=${GVPROXY_PATH:-/mnt/c/Users/Public/wsl-gvproxy.exe}
14+
GVPROXY_STORE=${GVPROXY_STORE:-/app/wsl-gvproxy.exe}
1415
TAP_NAME=${TAP_NAME:-wsltap}
1516
CHECK_HOST=${CHECK_HOST:-example.com}
1617
CHECK_DNS=${CHECK_DNS:-1.1.1.1}
@@ -20,13 +21,8 @@ set +x
2021

2122
# WSL2 default values
2223
WSL2_TAP_NAME=${WSL2_TAP_NAME:-eth0}
23-
WSL2_RESOLVCONF_DEFAULT="/mnt/wsl/resolv.conf"
24-
if [ ! -f "$WSL2_RESOLVCONF_DEFAULT" ]; then
25-
WSL2_RESOLVCONF_DEFAULT="/etc/resolv.conf"
26-
fi
27-
WSL2_RESOLVCONF=${WSL2_RESOLVCONF:-$WSL2_RESOLVCONF_DEFAULT}
28-
WSL2_GATEWAY_IP_FROM_RESOLVCONF="$(cat $WSL2_RESOLVCONF | awk '/^nameserver/ {print $2}')"
29-
WSL2_GATEWAY_IP=${WSL2_GATEWAY_IP:-$WSL2_GATEWAY_IP_FROM_RESOLVCONF}
24+
WSL2_GATEWAY_IP_FROM_IP_ROUTE="$(ip route | awk '/^default/ { print $3 }')"
25+
WSL2_GATEWAY_IP=${WSL2_GATEWAY_IP:-$WSL2_GATEWAY_IP_FROM_IP_ROUTE}
3026

3127
set -x
3228

@@ -41,6 +37,30 @@ fi
4137
# replace calls to iptables if iptables-legacy exists
4238
command -v iptables-legacy >/dev/null && alias iptables=iptables-legacy
4339

40+
install_file () {
41+
if [ -f $2 ]; then
42+
if [ ! -f "$3" ]; then
43+
mkdir -p "$(dirname $3)"
44+
cp $2 "$3"
45+
echo "copied $1 to $3"
46+
else
47+
echo "$1 exists at $3"
48+
if [ `hash $2` != `hash "$3"` ]; then
49+
cp -f $2 "$3"
50+
echo "updated $1 at $3"
51+
fi
52+
fi
53+
if [ ! -f "$2-ln" ]; then
54+
ln -s "$3" "$2-ln"
55+
echo "created symbolic link at $2-ln"
56+
fi
57+
fi
58+
}
59+
60+
install () {
61+
install_file wsl-gvproxy.exe "$GVPROXY_STORE" "$GVPROXY_PATH"
62+
}
63+
4464
run () {
4565
echo "starting vm and gvproxy..."
4666
$VMEXEC_PATH \
@@ -54,24 +74,21 @@ run () {
5474
}
5575

5676
wsl2tap_down () {
57-
# remove WSL2 default route
58-
ip route del default
59-
6077
# setup wsl-vpnkit tap
6178
ip tuntap add $TAP_NAME mode tap
6279
ip link set dev $TAP_NAME address $TAP_MAC_ADDR
6380
ip link set dev $TAP_NAME up
6481
ip addr add $VPNKIT_LOCAL_IP/255.255.255.0 dev $TAP_NAME
65-
ip route add default via $VPNKIT_GATEWAY_IP dev $TAP_NAME
82+
ip route add default via $VPNKIT_GATEWAY_IP dev $TAP_NAME metric 1 # Set the low priority
6683
}
6784

6885
wsl2tap_up () {
6986
# take down wsl-vpnkit tap
7087
ip link set dev $TAP_NAME down 2>/dev/null
7188
ip tuntap del $TAP_NAME mode tap
7289

73-
# add WSL2 default route
74-
ip route add default via $WSL2_GATEWAY_IP dev $WSL2_TAP_NAME 2>/dev/null
90+
# del added default route
91+
ip route del default dev $TAP_NAME 2>/dev/null
7592
}
7693

7794
iptables_set () {
@@ -144,10 +161,8 @@ if [ ! -f "$GVPROXY_PATH" ]; then
144161
echo "GVPROXY_PATH [$GVPROXY_PATH] does not exist"
145162
exit 1
146163
fi
147-
cat $WSL2_RESOLVCONF | grep "automatically generated by WSL" >/dev/null
148-
if [ $? -eq 1 ]; then
149-
echo "resolv.conf has been modified without setting generateResolvConf"
150-
fi
164+
165+
install
151166
$GVPROXY_PATH -help 2>/dev/null
152167
if [ $? -eq 1 ]; then
153168
echo "$GVPROXY_PATH is not executable due to WSL interop settings or Windows permissions"

0 commit comments

Comments
 (0)