Linux

在 Linux 中,如何在具有多個 IP 地址的單個介面上獲取每個 IP 地址的流量?

  • April 11, 2020

在我的場景中,我的主機有一個具有多個 IP 地址的網路介面。我想獲取每個 IP 地址的流量。我想接收和發送數據包和字節,以及錯誤數據包。我的界面是:

qg-6108c4a2-94@if209: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
   link/ether fa:16:3e:9e:58:d2 brd ff:ff:ff:ff:ff:ff link-netnsid 0
   inet 173.20.12.8/24 brd 173.20.12.255 scope global qg-6108c4a2-94
      valid_lft forever preferred_lft forever
   inet 173.20.12.7/32 brd 173.20.12.7 scope global qg-6108c4a2-94
      valid_lft forever preferred_lft forever
   inet 173.20.12.11/32 brd 173.20.12.11 scope global qg-6108c4a2-94
      valid_lft forever preferred_lft forever
   inet 173.20.12.13/32 brd 173.20.12.13 scope global qg-6108c4a2-94
      valid_lft forever preferred_lft forever
   inet6 fe80::f816:3eff:fe9e:58d2/64 scope link
      valid_lft forever preferred_lft forever

您將無法獲得所需的資訊。IP 是同一個介面的一部分,因此,它們僅在物理級別計算。我應該注意到“ifconfig”是不夠的和過時的。該ip命令將向您顯示物理級別的摘要。

% ip -s link show br1000
10: br1000: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether 00:10:18:aa:a8:20 brd ff:ff:ff:ff:ff:ff
RX: bytes  packets  errors  dropped overrun mcast
15661372003 108647365 0       0       0       0
TX: bytes  packets  errors  dropped carrier collsns
278081828962 149463091 0       0       0       0

您需要使用iptablesnftables跟踪您想要跟踪的內容。

# iptables example - probably incorrect, I don't have a dev machine to test this.
iptables -A INPUT -i br1000 -d 10.100.0.1/24 -j LOG
iptables -A OUTPUT -i br1000 -s 10.100.0.1/24 -j LOG

# nftables example - probably incorrect, I don't have a dev machine to test this.
nft add rule ip filter INPUT iifname "br1000" ip daddr 10.100.0.1 counter log
nft add rule ip filter OUTPUT iiname "br1000" ip saddr 10.100.0.1 counter log

還有其他補充軟體也可以幫助您——首先想到的是vnstat. 但是您的里程可能會有所不同。

引用自:https://unix.stackexchange.com/questions/579263