【中級者向け?】SymmetricNATの作成方法

Uncategorized

はじめに

私はLinuxを趣味で使用して10年超えの一般ユーザです。SymmetricNAT(RFC3489廃止済みにて定義)の環境を作成する手順です。

やったこと

必要な機材

  • Linuxの入っているPC(仮想マシンでも可。NICが2枚あること。)

手順

下記のページを参考にNATするLinuxルータを作成します。
https://atmarkit.itmedia.co.jp/ait/articles/1002/09/news119_2.html

ポイントは、「MASQUERADE」に「–random オプション」を適用すること(手順の赤字)です。
参考のページ
https://manpages.ubuntu.com/manpages/bionic/ja/man8/iptables-extensions.8.html

下記が仮想マシンで試した作業をスクリプトにしたもの。

#! /bin/sh

##############
# wan側(NATして、外から見えるIPアドレスを持つNIC)
# lan側(NATされて、外から見えないIPアドレスを持つNIC)
##############
wan_eth='enp0s3'
lan_eth='enp0s8'
internal_net='192.168.56.0/24'


trusthost='192.168.0.20'
my_internal_ip='192.168.0.1'

echo 1 > /proc/sys/net/ipv4/ip_forward

##############
#Flush & Reset
##############
/sbin/iptables -F
/sbin/iptables -t nat -F
/sbin/iptables -X

##############
#sshで作業するために先に設定。
##############
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -p tcp --syn -m state --state NEW --dport 22 -j ACCEPT

##############
#Deafult Rule
##############
/sbin/iptables -P INPUT DROP

/sbin/iptables -P OUTPUT ACCEPT

/sbin/iptables -P FORWARD DROP
/sbin/iptables -A FORWARD -i $lan_eth -o $wan_eth -s $internal_net -j ACCEPT
/sbin/iptables -A FORWARD -i $wan_eth -o $lan_eth -m state --state ESTABLISHED,RELATED -j ACCEPT

#########
#loopback
#########
/sbin/iptables -A INPUT -i lo -j ACCEPT

###############################
#ICMP trusthost->my_internal_ip
###############################
/sbin/iptables -A INPUT -p icmp --icmp-type echo-request -i $lan_eth -j ACCEPT

###############################
#ICMP my_internal_ip->trusthost
###############################
/sbin/iptables -A INPUT -p icmp --icmp-type echo-reply -s $trusthost -d $my_internal_ip -j ACCEPT
###############################
#ssh trusthost-> my_internal_ip
###############################

#################
#SNAT(masquerade)
#################
/sbin/iptables -t nat -A POSTROUTING -o $wan_eth -s $internal_net -j MASQUERADE --random

#########
#logging
#########
/sbin/iptables -N LOGGING
/sbin/iptables -A LOGGING -j LOG --log-level warning --log-prefix "DROP:" -m limit
/sbin/iptables -A LOGGING -j DROP
/sbin/iptables -A INPUT -j LOGGING
/sbin/iptables -A FORWARD -j LOGGING

課題

  • 一般的なNATの判定手段が見つけられなかったです。
  • iptablesで何をどこに設定しているのかがわかりづらいので、
    下記のページを参考にして頭に入れながら作業するとわかりやすいです。
    https://christina04.hatenablog.com/entry/iptables-outline
  • このLAN側にはDHCPサーバがないので、自分でIPアドレス、デフォルトゲートウェイ、DNSを設定しないと動きません。(DNSサーバも動かしていない場合、ブロードバンドルータ同様にルータのIPアドレスをDNSとして設定しても動きません。GoogleパブリックDNSの8.8.8.8など設定してください。)

結果

無事、SymmetricNATを作成することができました。
ただし、sshをWAN側から設定可能としていたり、WAN・LAN側の両方をプライベートIPで試した関係で、セキュリティを考慮していない設定となっているので、実際のルータ(WAN側がグローバルIP)としての運用はできないのでご注意ください。

まとめ

今回は、SymmetricNATの作成方法として、Linuxのiptablesで再現するための設定方法を試しました。
ただ、NATの種類など今後時間ができたら調べてみたいと思います。(←多分やらないやつw)

NATの判定手段や関連するRFCをメモだけしておきます。
https://tex2e.github.io/rfc-translater/html/rfc3489.html
https://tex2e.github.io/rfc-translater/html/rfc5389.html
https://tex2e.github.io/rfc-translater/html/rfc8489.html

コメント

タイトルとURLをコピーしました