-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request moby#48597 from robmry/nat-unprotected
Add gateway mode "nat-unprotected"
- Loading branch information
Showing
12 changed files
with
289 additions
and
39 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
138 changes: 138 additions & 0 deletions
138
integration/network/bridge/iptablesdoc/generated/usernet-portmap-natunprot.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,138 @@ | ||
## Container on a nat-unprotected network, with a published port | ||
|
||
Running the daemon with the userland proxy disable then, as before, adding a network running a container with a mapped port, equivalent to: | ||
|
||
docker network create \ | ||
-o com.docker.network.bridge.name=bridge1 \ | ||
-o com.docker.network.bridge.gateway_mode_ipv4=nat-unprotected \ | ||
--subnet 192.0.2.0/24 --gateway 192.0.2.1 bridge1 | ||
docker run --network bridge1 -p 8080:80 --name c1 busybox | ||
|
||
The filter table is: | ||
|
||
Chain INPUT (policy ACCEPT 0 packets, 0 bytes) | ||
num pkts bytes target prot opt in out source destination | ||
|
||
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) | ||
num pkts bytes target prot opt in out source destination | ||
1 0 0 DOCKER-USER 0 -- * * 0.0.0.0/0 0.0.0.0/0 | ||
2 0 0 ACCEPT 0 -- * * 0.0.0.0/0 0.0.0.0/0 match-set docker-ext-bridges-v4 dst ctstate RELATED,ESTABLISHED | ||
3 0 0 DOCKER-ISOLATION-STAGE-1 0 -- * * 0.0.0.0/0 0.0.0.0/0 | ||
4 0 0 DOCKER 0 -- * * 0.0.0.0/0 0.0.0.0/0 match-set docker-ext-bridges-v4 dst | ||
5 0 0 ACCEPT 0 -- bridge1 !bridge1 0.0.0.0/0 0.0.0.0/0 | ||
6 0 0 ACCEPT 0 -- bridge1 bridge1 0.0.0.0/0 0.0.0.0/0 | ||
7 0 0 ACCEPT 0 -- docker0 !docker0 0.0.0.0/0 0.0.0.0/0 | ||
8 0 0 ACCEPT 0 -- docker0 docker0 0.0.0.0/0 0.0.0.0/0 | ||
|
||
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) | ||
num pkts bytes target prot opt in out source destination | ||
|
||
Chain DOCKER (1 references) | ||
num pkts bytes target prot opt in out source destination | ||
1 0 0 DROP 0 -- !docker0 docker0 0.0.0.0/0 0.0.0.0/0 | ||
2 0 0 ACCEPT 0 -- !bridge1 bridge1 0.0.0.0/0 0.0.0.0/0 | ||
|
||
Chain DOCKER-ISOLATION-STAGE-1 (1 references) | ||
num pkts bytes target prot opt in out source destination | ||
1 0 0 DOCKER-ISOLATION-STAGE-2 0 -- docker0 !docker0 0.0.0.0/0 0.0.0.0/0 | ||
2 0 0 DOCKER-ISOLATION-STAGE-2 0 -- bridge1 !bridge1 0.0.0.0/0 0.0.0.0/0 | ||
|
||
Chain DOCKER-ISOLATION-STAGE-2 (2 references) | ||
num pkts bytes target prot opt in out source destination | ||
1 0 0 DROP 0 -- * bridge1 0.0.0.0/0 0.0.0.0/0 | ||
2 0 0 DROP 0 -- * docker0 0.0.0.0/0 0.0.0.0/0 | ||
|
||
Chain DOCKER-USER (1 references) | ||
num pkts bytes target prot opt in out source destination | ||
1 0 0 RETURN 0 -- * * 0.0.0.0/0 0.0.0.0/0 | ||
|
||
|
||
<details> | ||
<summary>iptables commands</summary> | ||
|
||
-P INPUT ACCEPT | ||
-P FORWARD ACCEPT | ||
-P OUTPUT ACCEPT | ||
-N DOCKER | ||
-N DOCKER-ISOLATION-STAGE-1 | ||
-N DOCKER-ISOLATION-STAGE-2 | ||
-N DOCKER-USER | ||
-A FORWARD -j DOCKER-USER | ||
-A FORWARD -m set --match-set docker-ext-bridges-v4 dst -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT | ||
-A FORWARD -j DOCKER-ISOLATION-STAGE-1 | ||
-A FORWARD -m set --match-set docker-ext-bridges-v4 dst -j DOCKER | ||
-A FORWARD -i bridge1 ! -o bridge1 -j ACCEPT | ||
-A FORWARD -i bridge1 -o bridge1 -j ACCEPT | ||
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT | ||
-A FORWARD -i docker0 -o docker0 -j ACCEPT | ||
-A DOCKER ! -i docker0 -o docker0 -j DROP | ||
-A DOCKER ! -i bridge1 -o bridge1 -j ACCEPT | ||
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2 | ||
-A DOCKER-ISOLATION-STAGE-1 -i bridge1 ! -o bridge1 -j DOCKER-ISOLATION-STAGE-2 | ||
-A DOCKER-ISOLATION-STAGE-2 -o bridge1 -j DROP | ||
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP | ||
-A DOCKER-USER -j RETURN | ||
|
||
|
||
</details> | ||
|
||
Differences from [nat mode][400]: | ||
|
||
- In the DOCKER chain: | ||
- Where `nat` mode appended a default-DROP rule for any packets not accepted | ||
by the per-port/protocol rules, `nat-unprotected` appends a default-ACCEPT | ||
rule. [setDefaultForwardRule][402] | ||
- The ACCEPT rule is needed in case the filter-FORWARD chain's default | ||
policy is DROP. | ||
- Because the default for this network is ACCEPT, there is no per-port/protocol | ||
rule to ACCEPT packets for the published port `80/tcp`, [setPerPortIptables][401] | ||
doesn't set it up. | ||
- _If the userland proxy is enabled, it is still started._ | ||
|
||
The nat table is identical to [nat mode][400]. | ||
|
||
<details> | ||
<summary>nat table</summary> | ||
|
||
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) | ||
num pkts bytes target prot opt in out source destination | ||
1 0 0 DOCKER 0 -- * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL | ||
|
||
Chain INPUT (policy ACCEPT 0 packets, 0 bytes) | ||
num pkts bytes target prot opt in out source destination | ||
|
||
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) | ||
num pkts bytes target prot opt in out source destination | ||
1 0 0 DOCKER 0 -- * * 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL | ||
|
||
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) | ||
num pkts bytes target prot opt in out source destination | ||
1 0 0 MASQUERADE 0 -- * !bridge1 192.0.2.0/24 0.0.0.0/0 | ||
2 0 0 MASQUERADE 0 -- * !docker0 172.17.0.0/16 0.0.0.0/0 | ||
|
||
Chain DOCKER (2 references) | ||
num pkts bytes target prot opt in out source destination | ||
1 0 0 RETURN 0 -- bridge1 * 0.0.0.0/0 0.0.0.0/0 | ||
2 0 0 RETURN 0 -- docker0 * 0.0.0.0/0 0.0.0.0/0 | ||
3 0 0 DNAT 6 -- !bridge1 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 to:192.0.2.2:80 | ||
|
||
|
||
-P PREROUTING ACCEPT | ||
-P INPUT ACCEPT | ||
-P OUTPUT ACCEPT | ||
-P POSTROUTING ACCEPT | ||
-N DOCKER | ||
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER | ||
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER | ||
-A POSTROUTING -s 192.0.2.0/24 ! -o bridge1 -j MASQUERADE | ||
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE | ||
-A DOCKER -i bridge1 -j RETURN | ||
-A DOCKER -i docker0 -j RETURN | ||
-A DOCKER ! -i bridge1 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.0.2.2:80 | ||
|
||
|
||
</details> | ||
|
||
[400]: usernet-portmap.md | ||
[401]: https://github.com/robmry/moby/blob/52c89d467fc5326149e4bbb8903d23589b66ff0d/libnetwork/drivers/bridge/port_mapping_linux.go#L747 | ||
[402]: https://github.com/robmry/moby/blob/52c89d467fc5326149e4bbb8903d23589b66ff0d/libnetwork/drivers/bridge/setup_ip_tables_linux.go#L261-L266 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
48 changes: 48 additions & 0 deletions
48
integration/network/bridge/iptablesdoc/templates/usernet-portmap-natunprot.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
## Container on a nat-unprotected network, with a published port | ||
|
||
Running the daemon with the userland proxy disable then, as before, adding a network running a container with a mapped port, equivalent to: | ||
|
||
docker network create \ | ||
-o com.docker.network.bridge.name=bridge1 \ | ||
-o com.docker.network.bridge.gateway_mode_ipv4=nat-unprotected \ | ||
--subnet 192.0.2.0/24 --gateway 192.0.2.1 bridge1 | ||
docker run --network bridge1 -p 8080:80 --name c1 busybox | ||
|
||
The filter table is: | ||
|
||
{{index . "LFilter4"}} | ||
|
||
<details> | ||
<summary>iptables commands</summary> | ||
|
||
{{index . "SFilter4"}} | ||
|
||
</details> | ||
|
||
Differences from [nat mode][400]: | ||
|
||
- In the DOCKER chain: | ||
- Where `nat` mode appended a default-DROP rule for any packets not accepted | ||
by the per-port/protocol rules, `nat-unprotected` appends a default-ACCEPT | ||
rule. [setDefaultForwardRule][402] | ||
- The ACCEPT rule is needed in case the filter-FORWARD chain's default | ||
policy is DROP. | ||
- Because the default for this network is ACCEPT, there is no per-port/protocol | ||
rule to ACCEPT packets for the published port `80/tcp`, [setPerPortIptables][401] | ||
doesn't set it up. | ||
- _If the userland proxy is enabled, it is still started._ | ||
|
||
The nat table is identical to [nat mode][400]. | ||
|
||
<details> | ||
<summary>nat table</summary> | ||
|
||
{{index . "LNat4"}} | ||
|
||
{{index . "SNat4"}} | ||
|
||
</details> | ||
|
||
[400]: usernet-portmap.md | ||
[401]: https://github.com/robmry/moby/blob/52c89d467fc5326149e4bbb8903d23589b66ff0d/libnetwork/drivers/bridge/port_mapping_linux.go#L747 | ||
[402]: https://github.com/robmry/moby/blob/52c89d467fc5326149e4bbb8903d23589b66ff0d/libnetwork/drivers/bridge/setup_ip_tables_linux.go#L261-L266 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.