2020年7月7日火曜日

VyOSでSNAT (送信元NAT) を行う

自宅機器はZabbixで監視をしている。Zabbixはインターネットと直接通信をする必要がないため、内部のネットワークセグメントに配置し、VyOSを介してインターネット接続用のネットワークセグメントと通信させている。

しかし、インターネット接続用の一部機器において、スタティックルートを設定することができない機器があり、この機器に対して例えばPingによる死活監視を実施しようとした場合は、戻りルーティングがないため監視をすることができない。

この事象を解決するため、SNAT (Source NAT) をVyOSにて実施し、あたかもZabbixの監視サーバからの通信は同一セグメントのIPアドレスからの通信として見せる対処を行う。

環境

Zabbixとなる送信元サーバは、「192.168.11.24」となる。この送信元サーバから、192.168.33.0/24のネットワークセグメントの機器に対してPingやZabbix Agentによる監視をできるよう、「192.168.11.24」のIPアドレスをVyOSのIPアドレスである「192.168.33.31」のIPアドレスに変換を行う。


手順

1. SNATを設定

SNATの設定はset nat source rule <ルール番号> <設定>で行う。今回は、ルール番号を110として、以下のように設定を行う。

設定値 設定値 説明
description SNAT-t1024cent わかりやすい説明を記載
destination address 192.168.33.0/24 NAT対象とする送信先IPアドレスまたはネットワークアドレスを指定
outbound-interface eth0 送信するインターフェースを指定
source address 192.168.11.24 NAT対象とする送信元IPアドレスまたはネットワークアドレスを指定
translation address 192.168.33.31 変換後の送信元IPアドレスを指定

上記設定をコマンドに直すと以下の通りとなる。

# set nat source rule 110 description SNAT-t1024cent
# set nat source rule 110 destination address 192.168.33.0/24
# set nat source rule 110 outbound-interface eth0
# set nat source rule 110 source address 192.168.11.24
# set nat source rule 110 translation address 192.168.33.31
# commit
# save

確認コマンドで確認してみよう。

$ show nat source rules 
Disabled rules are not shown
Codes: X - exclude rule, M - masquerade rule

rule    intf              translation                                               
----    ----              -----------                                               
110     eth0              saddr 192.168.11.24 to 192.168.33.31                      
        proto-all         sport ANY                                                     
                          when daddr 192.168.33.0/24, dport ANY                     
Desc: SNAT-t1024cent

2. 接続確認

送信元サーバ (192.168.11.24) から送信先サーバ (192.168.33.23) にPingによる疎通確認を行った際の、SNATの状況を確認する。

まず、送信先サーバにてtcpdumpを使いPingのIPアドレスを確認してみるとVyOSのIPアドレスである「192.168.33.31」が送信元アドレスとなっていることがわかる。

# tcpdump -i any -nn host 192.168.33.31
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
21:12:56.077629 IP 192.168.33.31 > 192.168.33.23: ICMP echo request, id 12649, seq 1, length 64
21:12:56.077661 IP 192.168.33.23 > 192.168.33.31: ICMP echo reply, id 12649, seq 1, length 64
21:12:57.089793 IP 192.168.33.31 > 192.168.33.23: ICMP echo request, id 12649, seq 2, length 64
21:12:57.089816 IP 192.168.33.23 > 192.168.33.31: ICMP echo reply, id 12649, seq 2, length 64
21:12:58.113772 IP 192.168.33.31 > 192.168.33.23: ICMP echo request, id 12649, seq 3, length 64
21:12:58.113797 IP 192.168.33.23 > 192.168.33.31: ICMP echo reply, id 12649, seq 3, length 64
21:12:59.137910 IP 192.168.33.31 > 192.168.33.23: ICMP echo request, id 12649, seq 4, length 64
21:12:59.137930 IP 192.168.33.23 > 192.168.33.31: ICMP echo reply, id 12649, seq 4, length 64

VyOSにてshow nat source translations detailコマンドにて確認することで、SNATの状況を確認することができる。

$ show nat source translations detail 
Pre-NAT src          Pre-NAT dst        Post-NAT src         Post-NAT dst      
192.168.11.24        192.168.33.23      192.168.33.31        192.168.33.23     
  icmp: 192.168.11.24 ==> 192.168.33.31  timeout: 26 use: 1 
192.168.33.24        192.168.33.33      192.168.33.24        192.168.33.33     
  icmp: 192.168.33.24 ==> 192.168.33.24  timeout: 8 use: 1 

0 件のコメント:

コメントを投稿

人気の投稿