cell_z1 中 iptables NAT 配置的目的是什么?
What is perpose of iptables NAT configuration in cell_z1?
当我 ssh 进入 cell_z1 时。然后我可以看到这些路由 tables.
$ sudo iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
w--prerouting all -- anywhere anywhere
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
w--prerouting all -- anywhere anywhere
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
w--postrouting all -- anywhere anywhere
Chain w--instance-coiaggg2s3f (1 references)
target prot opt source destination
DNAT tcp -- anywhere cell-z1-0.node.dc1.cf.internal tcp dpt:60036 /* ac4154dd-a2bd-41d8-46bb-c5dfa3c8bfb2 */ to:10.254.0.6:8080
DNAT tcp -- anywhere cell-z1-0.node.dc1.cf.internal tcp dpt:60037 /* ac4154dd-a2bd-41d8-46bb-c5dfa3c8bfb2 */ to:10.254.0.6:2222
Chain w--instance-coiaggg2s3l (1 references)
target prot opt source destination
DNAT tcp -- anywhere cell-z1-0.node.dc1.cf.internal tcp dpt:60040 /* 74ab1082-7eca-4a09-7364-b266a23a7fdf */ to:10.254.0.2:8080
DNAT tcp -- anywhere cell-z1-0.node.dc1.cf.internal tcp dpt:60041 /* 74ab1082-7eca-4a09-7364-b266a23a7fdf */ to:10.254.0.2:2222
Chain w--postrouting (1 references)
target prot opt source destination
MASQUERADE all -- 10.254.0.0/30 !10.254.0.0/30 /* executor-healthcheck-8946f5d6-063c-4bae-474d-0032f72b8fcb */
MASQUERADE all -- 10.254.0.4/30 !10.254.0.4/30 /* ef658bba-214d-4eef-5228-410e8e8aeb69 */
MASQUERADE all -- 10.254.0.8/30 !10.254.0.8/30 /* 3cb958eb-409a-4aa9-48f1-41bb6573ebc6 */
MASQUERADE all -- 10.254.0.12/30 !10.254.0.12/30 /* 9600ee8c-9e63-4682-bed3-b14767ea46d3 */
MASQUERADE all -- 10.254.0.16/30 !10.254.0.16/30 /* executor-healthcheck-eda5cee2-81be-4890-6d67-2a9f108d6dda */
Chain w--prerouting (2 references)
target prot opt source destination
w--instance-coiaggg2s3f all -- anywhere anywhere /* ac4154dd-a2bd-41d8-46bb-c5dfa3c8bfb2 */
w--instance-coiaggg2s3l all -- anywhere anywhere /* 74ab1082-7eca-4a09-7364-b266a23a7fdf */
问题是:这些目的地的用途是什么?
当我卷入 cell_z1 时,它会出现 returns 301 错误。所以,我认为它已被删除。
- 10.254.0.6:8080
- 10.254.0.6:2222
- 10.254.0.2:8080
- 10.254.0.2:2222
但是,当路由器发射器将该应用程序端口映射到 60036、60037、60040、60041 时,它会导致某些推送的应用程序出现路由器 returns 502 错误
我的环境:
主机 OS : Ubuntu 服务器 16.10
虚拟盒子:5.0.32
$ bosh -e bosh-lite releases
Using environment '192.168.50.4' as client 'admin'
Name Version Commit Hash
cf 254+dev.1* 80a8305a+
cf-mysql 34.2.0+dev.1* b8dcbe32
cf-rabbitmq 222.15.0+dev.1* 377afa0a+
cf-rabbitmq-test 0.1.7 98720fb8
cflinuxfs2-rootfs 1.60.0* 0b44b228+
diego 1.11.0+dev.1* 4ee830c6
garden-runc 1.4.0* 60f9e9dd
routing 0.147.0 255f268f
~ 0.136.0 d29132da+
2017 年 4 月 11 日更新
我发现这个信息来自川崎(卫报网络图书馆)。
我在下面看到路线 table。但与 10.254.0.6 不同,路由 table 没有虚拟网卡和 10.254.0.2 (10.254.0.0/30)
的路由
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.244.16.1 0.0.0.0 UG 0 0 0 wcl8gbnff7q4-1
10.244.16.0 * 255.255.255.0 U 0 0 0 wcl8gbnff7q4-1
10.254.0.4 * 255.255.255.252 U 0 0 0 wbrdg-0afe0004
当您将应用程序部署到 CF 时,它会在您的一个 Diego Cell 上的容器中运行。容器有一个内部端口,目前 Diego 始终是 8080,Cell 发布一个外部端口(到 GoRouters)。外部端口通过 Cell 上的 iptables 规则映射到内部端口。我相信这就是您所看到/询问的内容。
总而言之,从您的浏览器到容器中的应用程序的流量采用如下路径:
Browser -> HTTP(S) -> Load Balancer -> HTTP(S) -> GoRouter -> (HTTP) -> External Port on Cell -> iptables -> Internal Port in Container -> Application
您可能还想知道端口 2222,这很相似,但该端口用于 cf ssh
进入容器的流量。
外行人应该永远不要手动删除或调整 Diego Cells 上的任何 iptables 规则。
当我 ssh 进入 cell_z1 时。然后我可以看到这些路由 tables.
$ sudo iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
w--prerouting all -- anywhere anywhere
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
w--prerouting all -- anywhere anywhere
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
w--postrouting all -- anywhere anywhere
Chain w--instance-coiaggg2s3f (1 references)
target prot opt source destination
DNAT tcp -- anywhere cell-z1-0.node.dc1.cf.internal tcp dpt:60036 /* ac4154dd-a2bd-41d8-46bb-c5dfa3c8bfb2 */ to:10.254.0.6:8080
DNAT tcp -- anywhere cell-z1-0.node.dc1.cf.internal tcp dpt:60037 /* ac4154dd-a2bd-41d8-46bb-c5dfa3c8bfb2 */ to:10.254.0.6:2222
Chain w--instance-coiaggg2s3l (1 references)
target prot opt source destination
DNAT tcp -- anywhere cell-z1-0.node.dc1.cf.internal tcp dpt:60040 /* 74ab1082-7eca-4a09-7364-b266a23a7fdf */ to:10.254.0.2:8080
DNAT tcp -- anywhere cell-z1-0.node.dc1.cf.internal tcp dpt:60041 /* 74ab1082-7eca-4a09-7364-b266a23a7fdf */ to:10.254.0.2:2222
Chain w--postrouting (1 references)
target prot opt source destination
MASQUERADE all -- 10.254.0.0/30 !10.254.0.0/30 /* executor-healthcheck-8946f5d6-063c-4bae-474d-0032f72b8fcb */
MASQUERADE all -- 10.254.0.4/30 !10.254.0.4/30 /* ef658bba-214d-4eef-5228-410e8e8aeb69 */
MASQUERADE all -- 10.254.0.8/30 !10.254.0.8/30 /* 3cb958eb-409a-4aa9-48f1-41bb6573ebc6 */
MASQUERADE all -- 10.254.0.12/30 !10.254.0.12/30 /* 9600ee8c-9e63-4682-bed3-b14767ea46d3 */
MASQUERADE all -- 10.254.0.16/30 !10.254.0.16/30 /* executor-healthcheck-eda5cee2-81be-4890-6d67-2a9f108d6dda */
Chain w--prerouting (2 references)
target prot opt source destination
w--instance-coiaggg2s3f all -- anywhere anywhere /* ac4154dd-a2bd-41d8-46bb-c5dfa3c8bfb2 */
w--instance-coiaggg2s3l all -- anywhere anywhere /* 74ab1082-7eca-4a09-7364-b266a23a7fdf */
问题是:这些目的地的用途是什么? 当我卷入 cell_z1 时,它会出现 returns 301 错误。所以,我认为它已被删除。
- 10.254.0.6:8080
- 10.254.0.6:2222
- 10.254.0.2:8080
- 10.254.0.2:2222
但是,当路由器发射器将该应用程序端口映射到 60036、60037、60040、60041 时,它会导致某些推送的应用程序出现路由器 returns 502 错误
我的环境: 主机 OS : Ubuntu 服务器 16.10 虚拟盒子:5.0.32
$ bosh -e bosh-lite releases
Using environment '192.168.50.4' as client 'admin'
Name Version Commit Hash
cf 254+dev.1* 80a8305a+
cf-mysql 34.2.0+dev.1* b8dcbe32
cf-rabbitmq 222.15.0+dev.1* 377afa0a+
cf-rabbitmq-test 0.1.7 98720fb8
cflinuxfs2-rootfs 1.60.0* 0b44b228+
diego 1.11.0+dev.1* 4ee830c6
garden-runc 1.4.0* 60f9e9dd
routing 0.147.0 255f268f
~ 0.136.0 d29132da+
2017 年 4 月 11 日更新
我发现这个信息来自川崎(卫报网络图书馆)。 我在下面看到路线 table。但与 10.254.0.6 不同,路由 table 没有虚拟网卡和 10.254.0.2 (10.254.0.0/30)
的路由
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.244.16.1 0.0.0.0 UG 0 0 0 wcl8gbnff7q4-1
10.244.16.0 * 255.255.255.0 U 0 0 0 wcl8gbnff7q4-1
10.254.0.4 * 255.255.255.252 U 0 0 0 wbrdg-0afe0004
当您将应用程序部署到 CF 时,它会在您的一个 Diego Cell 上的容器中运行。容器有一个内部端口,目前 Diego 始终是 8080,Cell 发布一个外部端口(到 GoRouters)。外部端口通过 Cell 上的 iptables 规则映射到内部端口。我相信这就是您所看到/询问的内容。
总而言之,从您的浏览器到容器中的应用程序的流量采用如下路径:
Browser -> HTTP(S) -> Load Balancer -> HTTP(S) -> GoRouter -> (HTTP) -> External Port on Cell -> iptables -> Internal Port in Container -> Application
您可能还想知道端口 2222,这很相似,但该端口用于 cf ssh
进入容器的流量。
外行人应该永远不要手动删除或调整 Diego Cells 上的任何 iptables 规则。