designetwork

ネットワークを軸としたIT技術メモ

iptablesのNATコネクション状態を確認する(AWS NATインスタンスなど)

f:id:daichi703n:20190309144649p:plain

AWS NATインスタンスなど、LinuxiptablesによりNATマシンを作成することがある。 ルータ、FWなどのNW機器の操作経験があるネットワークエンジニアであれば、コネクション状態を確認したいケースが多いと思う。

netstat-natコマンドを使用してshow xlateのように、LinuxでもNAT(NAPT/PAT)コネクション状態を確認する。netstatのオプションではなく、netstat-natコマンド。

netstat-nat をインストールする

標準のnetstatではiptablesによるNATコネクションは表示されない。

# netstat -natu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN
tcp        0      0 172.xx.x.x:22               xx.xxx.xx.xxx:61476         ESTABLISHED
tcp        0    216 172.xx.x.x:22               xx.xxx.xx.xxx:61179         ESTABLISHED
tcp        0      0 :::22                       :::*                        LISTEN
udp        0      0 0.0.0.0:68                  0.0.0.0:*
udp        0      0 172.xx.x.x:123              0.0.0.0:*
udp        0      0 127.0.0.1:123               0.0.0.0:*
udp        0      0 0.0.0.0:123                 0.0.0.0:*

Yumnetstat-natをインストールする。EPEL未インストールの場合はyum install epel-release

[root@ip-x-x-x-x ~]# yum install netstat-nat --enablerepo=epel
Loaded plugins: priorities, update-motd, upgrade-helper
amzn-main                                     | 2.1 kB  00:00:00
amzn-updates                                  | 2.5 kB  00:00:00
1060 packages excluded due to repository priority protections
Resolving Dependencies
--> Running transaction check
---> Package netstat-nat.x86_64 0:1.4.10-1.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================
 Package              Arch     Version        Repository   Size
================================================================
Installing:
 netstat-nat          x86_64   1.4.10-1.el6   epel         22 k

Transaction Summary
================================================================
Install  1 Package

Total download size: 22 k
Installed size: 45 k
Is this ok [y/d/N]: y
Downloading packages:
warning: /var/cache/yum/x86_64/latest/epel/packages/netstat-nat-1.4.10-1.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
Public key for netstat-nat-1.4.10-1.el6.x86_64.rpm is not installed
netstat-nat-1.4.10-1.el6.x86_64.rpm                |  22 kB  00:00:00
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
Importing GPG key 0x0608B895:
 Userid     : "EPEL (6) <epel@fedoraproject.org>"
 Fingerprint: 8c3b e96a f230 9184 da5c 0dae 3b49 df2a 0608 b895
 Package    : epel-release-6-8.9.amzn1.noarch (installed)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
Is this ok [y/N]: y
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : netstat-nat-1.4.10-1.el6.x86_64                                                                   1/1
  Verifying  : netstat-nat-1.4.10-1.el6.x86_64                                                                   1/1

Installed:
  netstat-nat.x86_64 0:1.4.10-1.el6

Complete!

netstat-natコマンド

netstat-natの詳細はこちら

https://www.tweegy.nl/projects/netstat-nat/

# netstat-nat --help
netstat-nat: invalid option -- '-'
args: -h: displays this help
      -n: don't resolve host/portnames
      -p <protocol>        : display connections by protocol
      -s <source-host>     : display connections by source
      -d <destination-host>: display connections by destination
      -S: display SNAT connections
      -D: display DNAT connections (default: SNAT & DNAT)
      -L: display only connections to NAT box itself (doesn't show SNAT & DNAT)
      -R: display only connections routed through the NAT box (doesn't show SNAT & DNAT)
      -x: extended hostnames view
      -r src | dst | src-port | dst-port | state : sort connections
      -o: strip output header
      -N: display NAT box connection information (only valid with SNAT & DNAT)
      -v: print version

      netstat-nat [-S|-D|-L|-R] [-no]
      netstat-nat [-nxo]

-nオプションでDNSによる名前解決を無効化し、-NオプションでNATインスタンスで変換、マッピングされたIPアドレス:ポート番号を表示する。

通信をしながら確認すると、以下のように状態遷移していくことが確認できる。192.168.0.10: 内部インスタンス172.16.0.10: NATインスタンス

# netstat-nat -nN
Proto NATed Address        NAT-host Address    Destination Address    State
tcp   192.168.0.10:51258    172.16.0.10:51258    93.184.216.34:443      ESTABLISHED
tcp   192.168.0.10:51330    172.16.0.10:51330    93.184.216.34:443      SYN_SENT   
tcp   192.168.0.10:51278    172.16.0.10:51278    93.184.216.34:443      CLOSE      

# netstat-nat -nN
Proto NATed Address        NAT-host Address    Destination Address    State
tcp   192.168.0.10:51258    172.16.0.10:51258    93.184.216.34:443      CLOSE      
tcp   192.168.0.10:51330    172.16.0.10:51330    93.184.216.34:443      ESTABLISHED
tcp   192.168.0.10:51278    172.16.0.10:51278    93.184.216.34:443      CLOSE      

# netstat-nat -nN
Proto NATed Address        NAT-host Address    Destination Address    State
tcp   192.168.0.10:51258    172.16.0.10:51258    93.184.216.34:443      CLOSE      
tcp   192.168.0.10:51330    172.16.0.10:51330    93.184.216.34:443      CLOSE      
tcp   192.168.0.10:51278    172.16.0.10:51278    93.184.216.34:443      CLOSE

NATゲートウェイのコネクション確認

NATインスタンスではなく、NATゲートウェイを使用する場合は、Cloud Watchから状態を確認できる。NATゲートウェイの方が運用面やパフォーマンスではメリットが多いかもしれない。

docs.aws.amazon.com

まとめ - iptablesでNATコネクション状態を確認する(AWS NATインスタンスなど)

netstat-natコマンドを使用することで、Linux (AWS NATインスタンス) にてiptablesでNAT(NAPT/PAT)されたコネクションの状態を確認することができた。