如何确定哪个是我在不同网络上的 IP 地址?
How can I determine which is my IP address on a different network?
我正在尝试从上传到 Azure 云中的 pod 启动 SNMP 查询到我公司网络上的内部主机。 snmpget 查询从 pod 到 public SNMP 服务器运行良好,但对我的目标主机的查询结果为:
root@status-tanner-api-86557c6786-wpvdx:/home/status-tanner-api/poller# snmpget -c public -v 2c 192.168.118.23 1.3.6.1.2.1.1.1.0
Timeout: No Response from 192.168.118.23.
NMAP 显示 SNMP 端口已打开|已过滤:
Nmap scan report for 192.168.118.23
Host is up (0.16s latency).
PORT STATE SERVICE
161/udp open|filtered snmp
我请求了一条新规则以允许来自我的 pod 的 161UDP,但我怀疑我请求的规则是针对错误的 IP 地址制定的。
我的理论是,如果 我可以进入目标主机,从 pod 打开连接并查看使用 我应该能够确定我的 pod 用于访问此目标主机的 IP 地址=12=] 这是我的 pod 使用的 IP 地址
。问题是我目前无权访问该主机。
所以,我的问题是 我如何才能看到我的 pod 从哪个地址到达目标主机? 显然使用了某种 public 地址,但我无法分辨没有进入目标主机是哪一个
我很确定我缺少一个重要的网络工具,它可以帮助我解决这种情况。任何建议将不胜感激。
默认情况下,Kubernetes 将使用您的节点 IP 访问其他服务器,因此您需要使用您的节点 IP 制定防火墙规则。
我测试过使用 busybox pod 访问我网络中的其他服务器
这是我的 lab-1 节点 IP,ip 10.128.0.62
:
$rabello@lab-1:~ ip ad | grep ens4 | grep inet
inet 10.128.0.62/32 scope global dynamic ens4
在这个节点中,我有一个 busybox pod,ip 为 192.168.251.219
:
$ kubectl exec -it busybox sh
/ # ip ad | grep eth0 | grep inet
inet 192.168.251.219/32 scope global eth0
当对网络中的另一台服务器 (server-1) 执行 ping 测试时,我们有:
/ # ping 10.128.0.61
PING 10.128.0.61 (10.128.0.61): 56 data bytes
64 bytes from 10.128.0.61: seq=0 ttl=63 time=1.478 ms
64 bytes from 10.128.0.61: seq=1 ttl=63 time=0.337 ms
^C
--- 10.128.0.61 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.337/0.907/1.478 ms
在 server-1 上使用 tcpdump,我们可以使用来自 lab-1 的节点 ip 查看来自我的 pod 的 ping 请求:
rabello@server-1:~$ sudo tcpdump -n icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
10:16:09.291714 IP 10.128.0.62 > 10.128.0.61: ICMP echo request, id 6230, seq 0, length 64
10:16:09.291775 IP 10.128.0.61 > 10.128.0.62: ICMP echo reply, id 6230, seq 0, length 64
^C
4 packets captured
4 packets received by filter
0 packets dropped by kernel
确保您有适当的防火墙规则以允许您的节点(或您的 vpc 范围)到达您的目的地并检查您的 VPN 是否已启动(如果您有)。
希望对您有所帮助! =)
我正在尝试从上传到 Azure 云中的 pod 启动 SNMP 查询到我公司网络上的内部主机。 snmpget 查询从 pod 到 public SNMP 服务器运行良好,但对我的目标主机的查询结果为:
root@status-tanner-api-86557c6786-wpvdx:/home/status-tanner-api/poller# snmpget -c public -v 2c 192.168.118.23 1.3.6.1.2.1.1.1.0
Timeout: No Response from 192.168.118.23.
NMAP 显示 SNMP 端口已打开|已过滤:
Nmap scan report for 192.168.118.23
Host is up (0.16s latency).
PORT STATE SERVICE
161/udp open|filtered snmp
我请求了一条新规则以允许来自我的 pod 的 161UDP,但我怀疑我请求的规则是针对错误的 IP 地址制定的。
我的理论是,如果 我可以进入目标主机,从 pod 打开连接并查看使用 我应该能够确定我的 pod 用于访问此目标主机的 IP 地址=12=] 这是我的 pod 使用的 IP 地址
我很确定我缺少一个重要的网络工具,它可以帮助我解决这种情况。任何建议将不胜感激。
默认情况下,Kubernetes 将使用您的节点 IP 访问其他服务器,因此您需要使用您的节点 IP 制定防火墙规则。
我测试过使用 busybox pod 访问我网络中的其他服务器
这是我的 lab-1 节点 IP,ip 10.128.0.62
:
$rabello@lab-1:~ ip ad | grep ens4 | grep inet
inet 10.128.0.62/32 scope global dynamic ens4
在这个节点中,我有一个 busybox pod,ip 为 192.168.251.219
:
$ kubectl exec -it busybox sh
/ # ip ad | grep eth0 | grep inet
inet 192.168.251.219/32 scope global eth0
当对网络中的另一台服务器 (server-1) 执行 ping 测试时,我们有:
/ # ping 10.128.0.61
PING 10.128.0.61 (10.128.0.61): 56 data bytes
64 bytes from 10.128.0.61: seq=0 ttl=63 time=1.478 ms
64 bytes from 10.128.0.61: seq=1 ttl=63 time=0.337 ms
^C
--- 10.128.0.61 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.337/0.907/1.478 ms
在 server-1 上使用 tcpdump,我们可以使用来自 lab-1 的节点 ip 查看来自我的 pod 的 ping 请求:
rabello@server-1:~$ sudo tcpdump -n icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
10:16:09.291714 IP 10.128.0.62 > 10.128.0.61: ICMP echo request, id 6230, seq 0, length 64
10:16:09.291775 IP 10.128.0.61 > 10.128.0.62: ICMP echo reply, id 6230, seq 0, length 64
^C
4 packets captured
4 packets received by filter
0 packets dropped by kernel
确保您有适当的防火墙规则以允许您的节点(或您的 vpc 范围)到达您的目的地并检查您的 VPN 是否已启动(如果您有)。
希望对您有所帮助! =)