Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[27.x backport] Do not DNAT packets from WSL2's loopback0 #48514

Merged

Conversation

robmry
Copy link
Contributor

@robmry robmry commented Sep 17, 2024

- What I did

When running WSL2 with mirrored mode networking, add an iptables rule to skip DNAT for packets arriving on interface loopback0 that are addressed to a localhost address - they're from the Windows host.

WSL2's mirrored mode networking is outlined here.

- How I did it

Detect WSL2 mirrored mode by the presence of interface loopback0, and (inspired by this workaround linked from the WSL ticket) /usr/bin/wslinfo --networking-mode reporting mirrored, see wslinfo release note.

If needed, create a rule in the nat-DOCKER chain to return early for packets arriving on loopback0 for 127.0.0.0/8.

There's no IPv6 rule, because WSL2 mirrored mode doesn't support it.

- How to verify it

As described on the ticket, with docker-ce installed in an instance of Linux (Ubuntu) running under WSL2 with networkingMode=mirrored - run an nginx container with -p 8080:80, check that the Windows host can connect to it via http://localhost:8080.

Also checked that the new iptables rule is not created unless it's needed.

Access from Linux to a service running on the Windows localhost address worked before and after this change.

(--userland-proxy=true, the default, is required for this to work.)

New unit test, just to check the conditions for adding the rule.

- Description for the changelog

Support WSL2 mirrored-mode networking's use of interface `loopback0` for packets from the Windows host.

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
When running WSL2 with mirrored mode networking, add an iptables
rule to skip DNAT for packets arriving on interface loopback0 that
are addressed to a localhost address - they're from the Windows
host.

Signed-off-by: Rob Murray <rob.murray@docker.com>
(cherry picked from commit f9c0103)
Signed-off-by: Rob Murray <rob.murray@docker.com>
@robmry robmry added kind/feature Functionality or other elements that the project doesn't currently have. Features are new and shiny area/networking area/networking/firewalling area/networking/d/bridge labels Sep 17, 2024
@robmry robmry added this to the 27.3.0 milestone Sep 17, 2024
@robmry robmry self-assigned this Sep 17, 2024
@robmry robmry requested a review from akerouanton September 17, 2024 09:07
@robmry robmry marked this pull request as ready for review September 17, 2024 10:28
@thaJeztah
Copy link
Member

thaJeztah commented Sep 17, 2024

For future reference; we don't need the follow-up fix from #48515, as we decided to not (yet) backport the netlink update; that updated module had a couple of issues, and required changes in various areas. As updating that module is not critical (current version has worked for a long time without known issues), we don't want to risk taking in those changes until they got some burn-in time in the master branch.

Copy link
Member

@thaJeztah thaJeztah left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@thaJeztah thaJeztah merged commit 856359c into moby:27.x Sep 17, 2024
145 checks passed
@robmry robmry deleted the backport-27.x/wsl2_mirrored_loopback0_workaround branch September 17, 2024 14:16
renovate bot added a commit to earthly/dind that referenced this pull request Sep 23, 2024
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [docker/docker](https://redirect.github.com/docker/docker) | minor |
`27.2.1` -> `27.3.1` |

---

### Release Notes

<details>
<summary>docker/docker (docker/docker)</summary>

###
[`v27.3.1`](https://redirect.github.com/moby/moby/releases/tag/v27.3.1)

[Compare
Source](https://redirect.github.com/docker/docker/compare/v27.3.0-rc.1...v27.3.1)

#### 27.3.1

For a full list of pull requests and changes in this release, refer to
the relevant GitHub milestones:

- [docker/cli, 27.3.1
milestone](https://redirect.github.com/docker/cli/issues?q=sort%3Aupdated-desc+is%3Aclosed+milestone%3A27.3.1)
- [moby/moby, 27.3.1
milestone](https://redirect.github.com/moby/moby/issues?q=sort%3Aupdated-desc+is%3Aclosed+milestone%3A27.3.1)

##### Bug fixes and enhancements

- CLI: Fix issue with command execution metrics not being exported due
to the CLI MeterProvider being shutdown too early.
[docker/cli#5457](https://redirect.github.com/docker/cli/pull/5457)

##### Packaging updates

- Update `Compose` to
[v2.29.7](https://redirect.github.com/docker/compose/releases/tag/v2.29.7)

###
[`v27.3.0`](https://redirect.github.com/moby/moby/releases/tag/v27.3.0)

[Compare
Source](https://redirect.github.com/docker/docker/compare/v27.2.1...v27.3.0-rc.1)

#### 27.3.0

For a full list of pull requests and changes in this release, refer to
the relevant GitHub milestones:

- [docker/cli, 27.3.0
milestone](https://redirect.github.com/docker/cli/issues?q=sort%3Aupdated-desc+is%3Aclosed+milestone%3A27.3.0)
- [moby/moby, 27.3.0
milestone](https://redirect.github.com/moby/moby/issues?q=sort%3Aupdated-desc+is%3Aclosed+milestone%3A27.3.0)

##### Bug fixes and enhancements

- containerd image store: Fix `docker image prune -a` untagging images
used by containers started from images referenced by a digested
reference.
[moby/moby#48488](https://redirect.github.com/moby/moby/pull/48488)
- Add a `--feature` flag to the daemon options.
[moby/moby#48487](https://redirect.github.com/moby/moby/pull/48487)
- Updated the handling of the `--gpus=0` flag to be consistent with the
NVIDIA Container Runtime.
[moby/moby#48483](https://redirect.github.com/moby/moby/pull/48483)

[https://github.com/docker/cli/pull/5432](https://redirect.github.com/docker/cli/pull/5432)5432)
- Support WSL2 mirrored-mode networking's use of interface `loopback0`
for packets from the Windows host.
[moby/moby#48514](https://redirect.github.com/moby/moby/pull/48514)
- Fix an issue that prevented communication between containers on an
IPv4 bridge network when running with `--iptables=false`,
`--ip6tables=true` (the default), a firewall with a DROP rule for
forwarded packets on hosts where the `br_netfilter` kernel module was
not normally loaded.
[moby/moby#48511](https://redirect.github.com/moby/moby/pull/48511)
- CLI: Fix issue where `docker volume update` command would cause the
CLI to panic if no argument/volume was passed.
[docker/cli#5426](https://redirect.github.com/docker/cli/pull/5426)
- CLI: Properly report metrics when run in WSL environment on Windows.
\[[docker/cli#5432](https://redirect.github.com/docker/cli/issues/5432)]

##### Packaging updates

- Update `containerd` (static binaries only) to
[v1.7.22](https://redirect.github.com/containerd/containerd/releases/tag/v1.7.22)
    [moby/moby#48468](https://redirect.github.com/moby/moby/pull/48468)
- Updated `Buildkit` to
[v0.16.0](https://redirect.github.com/moby/buildkit/releases/tag/v0.16.0)
- Update `Compose` to
[v2.29.6](https://redirect.github.com/docker/compose/releases/tag/v2.29.6)
- Update `Buildx` to
[v0.17.1](https://redirect.github.com/docker/buildx/releases/tag/v0.17.1)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "after 6am on monday" (UTC), Automerge
- At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/earthly/dind).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC44MC4wIiwidXBkYXRlZEluVmVyIjoiMzguODAuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsicmVub3ZhdGUiXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/networking/d/bridge area/networking/firewalling area/networking kind/feature Functionality or other elements that the project doesn't currently have. Features are new and shiny
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants