ASAでNAT。変換後IPにインタフェースに無いIPを利用する
調べて出てくる情報は、たいていASAのインタフェースもしくはそれが含まれるサブネットへの変換が多いので、ネットワーク上でどのインタフェースにも振られていないIPを利用してNATするメモ。
本来のIPアドレスを隠蔽する目的であったり、比較的自由なNAT用IP空間の利用であったり、と、ケースとしては他の組織と接続する際などに利用される。それが作法である場合もある。
実ホスト192.168.1.101:8080に対して、外部見立ての172.16.1.101は10.168.1.101:80を宛先としてアクセスする。R1は、10.168.1.101へ通信できる経路情報をネクストホップを10.0.2.2として持つ
以下、ASAの設定の必要部分を抜粋する。補足/蛇足だが、static natは設定すると、NATルールが双方向に有効になる。ここでは内→外(dmz,outside)で設定するが、外→内(outside,dmz)で設定することもできる。勿論その際sourceやdestinationは異なってくる。参考
https://community.cisco.com/t5/セキュリティ-ドキュメント/asa-natルールタイプ別の処理の違いと-設定例/ta-p/3158769#toc-hId--1211329983
以下設定
interface GigabitEthernet0
nameif dmz
security-level 50
ip address 192.168.1.254 255.255.255.0
!
interface GigabitEthernet1
nameif outside
security-level 0
ip address 10.0.2.2 255.255.255.252
!
object network ip-192.168.1.101
host 192.168.1.101
object network ip-10.168.1.101
host 10.168.1.101
object network ip-172.16.1.101
host 172.16.1.101
object service src-tcp-8080
service tcp source eq 8080
object service src-tcp-80
service tcp source eq www
access-list hoge extended permit tcp object ip-172.16.1.101 object ip-192.168.1.101 eq 8080
!
nat (dmz,outside) source static ip-192.168.1.101 ip-10.168.1.101 destination static ip-172.16.1.101 ip-172.16.1.101 service src-tcp-8080 src-tcp-80
access-group hoge in interface outside
route outside 0.0.0.0 0.0.0.0 10.0.2.1 1
ASAでNATしてサーバを公開する設定
掲題の設定に関するCisco ASA(いわゆる8.3以降)の情報が、なぜかあまりまとまったものが無かったので、メモ。
テストに利用する構成は下記で、要点は192.168.1.101のWebサーバを、10.0.0.2で外からアクセスできるようにするというもの。ここでは172.16.1.101のホストからアクセス可能なようにする。それ以外の通信はここでは考えていない
むりやり読み替えると、現実のインターネットには無いが、このテスト環境は10.0.0.0/24のグローバルアドレス空間を持っているということもできる。
ASAの設定をしていく。
まずインタフェースとデフォルトルートを設定。
interface GigabitEthernet0nameif outside
security-level 0
ip address 10.0.0.1 255.255.255.0
!
interface GigabitEthernet1
nameif dmz
security-level 50
ip address 192.168.1.254 255.255.255.0
!
route outside 0.0.0.0 0.0.0.0 10.0.0.254 1
ASAでnameifコマンドは必須。outsideやdmzといった名前は勝手にデフォルトでセキュリティレベルが設定される。ここでは、dmzを50として、outsideよりセキュア?信頼できる?(設定数値が小さい)状態としている。
ciscoasa(config-if)# nameif outsideINFO: Security level for "outside" set to 0 by default.
ciscoasa(config-if)# nameif dmz
INFO: Security level for "dmz" set to 0 by default.
オブジェクトを設定する。ASAに限らずFWは、オブジェクトやオブジェクトグループで設定する考え方したほうが良い。
object network ip-192.168.1.101host 192.168.1.101
object network ip-10.0.0.2
host 10.0.0.2
object service src-http
service tcp source eq 80
そして、NATの設定を入れる。ASA8.3以降は、Twice NAT (別名:Manual NAT)と Network Object NAT (別名:Auto NAT) という2方式の設定があって、普段Auto NATをあまり使ったことが無いのでここではManualでやっている。NATタイプなどはCiscoの資料などを参照すると良いと思います。
カッコとか文字にあるし、わりと悟りが必要なタイプの設定だと感じるが、基本[実IP][変換後IP]の順序で各項目を記載する。
nat (dmz,outside) source static ip-192.168.1.101 ip-10.0.0.2 service src-http src-httpここでとても大切なことがあって、このNATの設定を入れると、ASAは10.0.0.2のARPに応答する。外部から見て10.0.0.2の着信がASAの10.0.0.1のインタフェースに対して可能となる。
隣接ルータから見たarpテーブル。
R1#show ip arpProtocol Address Age (min) Hardware Addr Type Interface
Internet 10.0.0.2 4 0000.ab12.1212 ARPA FastEthernet0/0
Internet 10.0.0.1 0 0000.ab12.1212 ARPA FastEthernet0/0
この段階ではまだアクセスはできない。外側のセキュリティの低いインタフェース側の着信方向に、実IPへの許可ACLを設定する必要がある。
access-list hoge extended permit tcp host 172.16.1.101 host 192.168.1.101 eq 80access-group hoge in interface outside
以上。
Arduinoで逃げるプラレール
Arduino nano 3.0互換ボードATMEGA 328 Pを介して、IR赤外線障害物回避センサLM393で物体を検知していなければモータを回し、検知するとモータを止める(モータードライバはTA7291Pを利用)。上記の他に準備したものは、電池ボックス(単三×2)とタミヤのギヤボックスセット。という前回の記事のものを利用して、衝突回避プラレールのプロトタイプをする
と思いきやほとんど同じことをより高いレベルで実現している方がいらしたので、普通は下記参照したほうが良いでしょう。
www.mita.nu今回作ったものは、床で走らせたら前方の物体から逃げてるように見えた
www.youtube.com
スケッチや接続は下記のとおり。
/*モータドライバ接続 *https://fabkura.gitbooks.io/arduino-docs/content/chapter17.html * モータドライバ#10 OUT2 --- モータ(+) * モータドライバ#9 使用無し --- 無し * モータドライバ#8 出力側電源 --- 電源(+) * モータドライバ#7 電源+ --- 電源5V=PIN5V * モータドライバ#6 IN2(信号2) --- digital#2=PIN2 * モータドライバ#5 IN1(信号1) --- digital#4=PIN4 * モータドライバ#4 制御電源(速度) --- digital$3(PWM)=PIN3 * モータドライバ#3 使用無し --- 無し * モータドライバ#2 OUT1 --- モータ(-) * モータドライバ#1 GND --- GND * * *電源(-) --- GND */ /*モータの動作参考 * https://www.petitmonte.com/robot/motor_driver_ta7291p.html */ /*赤外線センサ接続 * OUT --- digital#12=PIN12 * GND --- GND * VCC --- 電源5V=PIN5V * センサはデジタルで通常"1"を返し、検知時に0を返す */ //for Infrared sensor int val = 0; void setup() { pinMode(2,OUTPUT); //IN2 pinMode(4,OUTPUT); //IN1 pinMode(12,INPUT); //infrared sensor Serial.begin(9600); } void loop() { //モーターの回転速度を設定 analogWrite(3,255); val = digitalRead(12); //センサの読み取り if (val==1) { //センサが何も検出していない //回転 // Serial.println(val); //シリアルモニタにセンサの状態を出す用 digitalWrite(4,HIGH); digitalWrite(2,LOW); delay(100); } else { //センサが検出した //ブレーキ // Serial.println(val); //シリアルモニタにセンサの状態を出す用 digitalWrite(4,HIGH); digitalWrite(2,HIGH); delay(100); // 逆回転 analogWrite(3,255); digitalWrite(4,LOW); digitalWrite(2,HIGH); delay(2000); //ブレーキとストップの違い //ブレーキはモータの軸を回すと抵抗力を感じます //ストップは軸をまわすと抵抗無く回ります とのこと } }