NAT除外設定

Cisco IOSでNAT設定を入れている時に,特定のセグメントへの通信のみNATさせずに実アドレスで通信させる設定のメモ。

単純にaccess-listのPermitの前段に除外したいACLを入れてあげればよいかと思いきや,うまくいかない。
どうしたらいいかというと,Route-Mapを使う。

! ACL設定

ip access-list extended No_NAT
deny ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
permit ip 192.168.1.0 0.0.0.255 any

! Route-Map設定
route-map RM_NAT permit 10

match ip address No_NAT

! NAT設定
ip nat inside source route-map RM_NAT pool VLAN1

2020年

なんだかんだ,こういうものを描けるのってすごいよね。
見ていてわくわくするわ。


ただ,インフラエンジニアとしてこの辺どう絡むのかサッパリだ。

要件定義書とか設計書を未だにエクセルでゴリゴリ書いているのを見るとゲンナリするから,こんなデバイスでニュイーンニュイーンて欲しい機能を集めると勝手に要件定義書ができるって仕組みできるとイイナ。

そう考えるとやっぱある程度コードできんとダメなんだな。未だに全然だけど。

【OpenStack】Cinder Volumeのバックアップ

未だ理解できず。

  • Snapshot ・・・ ボリュームの一時点の状態を保存する。そのままでは使えないので,イメージにアップロードするか,ボリューム化するか。Passiveなやつ。
  • Clone・・・ボリュームの丸コピーをもう1つ作る。cinder create でソースをコピー元。cloneというコマンドは無い。openstack コマンドではどうなっているか知らない。
  • Backup・・・メタデータとかをDBに保存して,空のボリュームにデータをリストアするためのもの。

あっているのか。この認識。

インスタンスをボリュームから起動している場合のバックアップをどうしようかなーと考えていたんだが,

  1. オンラインでCinderのSnapshotを取る
  2. そのSnapshotをもとにVolumeを作成
  3. インスタンスのデータがぶっ飛んだら,このVolumeをもとに起動しなおし

という感じで行けたりしないかな。
システムにもよるだろうけど,そんな簡単には行かないか。

ESXアップデートメモ

UPDATE2にしようしようと忘れていた。

ので,ちゃっちゃとやった。
参考)ESXi 5.x/6.x ホストにコマンド ラインからパッチをインストールする (2092895)
my vmwareからパッチをDL。

ESXへSSHで接続。
チャレンジレスポンスでやらんと認証うまくいかない。

・現状チェック
esxcli system version get
   Product: VMware ESXi
   Version: 6.0.0
   Build: Releasebuild-2494585
   Update: 0
   Patch: 0

・profile確認
# esxcli software profile get
ESXi-6.0.0-2494585-standard
   Name: ESXi-6.0.0-2494585-standard
   Vendor: VMware, Inc.
   Creation Time: 2015-05-13T15:47:49
   Modification Time: 2015-05-13T15:49:08
   Stateless Ready: True

   Description:

・メンテナンスモード移行
vim-cmd hostsvc/maintenance_mode_enter

・パッチ中身確認
# software sources profile list
-d /vmfs/volumes/datastore1/patch/update-from-esxi6.0-6.0_update02.zip
Name                              Vendor        Acceptance Level
——————————–  ————  —————-
ESXi-6.0.0-20160301001s-no-tools  VMware, Inc.  PartnerSupported
ESXi-6.0.0-20160302001-standard   VMware, Inc.  PartnerSupported
ESXi-6.0.0-20160301001s-standard  VMware, Inc.  PartnerSupported
ESXi-6.0.0-20160302001-no-tools   VMware, Inc.  PartnerSupported

・テスト
 esxcli software profile update –dry-run
-d /vmfs/volumes/datastore1/patch/update-from-esxi6.0-6.0_update02.zip
-p ESXi-6.0.0-20160302001-standard

・Go!
 esxcli software profile update
-d /vmfs/volumes/datastore1/patch/update-from-esxi6.0-6.0_update02.zip
-p ESXi-6.0.0-20160302001-standard

Update Result
   Message: The update completed successfully, but the system needs to be rebooted for the changes to be effective.

   Reboot Required: true

・再起動
# reboot

・確認
# esxcli system version get
   Product: VMware ESXi
   Version: 6.0.0
   Build: Releasebuild-3620759
   Update: 2

   Patch: 34
esxcli software profile get
(Updated) ESXi-6.0.0-2494585-standard
   Name: (Updated) ESXi-6.0.0-2494585-standard
   Vendor: esxhome
   Creation Time: 2016-07-01T00:18:32
   Modification Time: 2016-07-01T00:19:18
   Stateless Ready: True
   Description:

・メンテナンスモードExit
vim-cmd hostsvc/maintenance_mode_exit

以上。

AWS上のVyosと家のC841とでIPSecを試す~VTI編~

VTIでも設定したのでメモ・・・。

ACLいらないし, GRE分のオーバーヘッド(24バイト)も減るしこっちのほうがなんかいいかも。
# IP以外のプロトコルなんてあんま使わないしな。

 ■ MTU
#sh int tu1
Tunnel1 is up, line protocol is up
  Hardware is Tunnel
  Internet address is 192.168.48.234/29
  MTU 17862 bytes, BW 100 Kbit/sec, DLY 50000 usec,
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation TUNNEL, loopback not set
  Keepalive set (5 sec), retries 3
  Tunnel linestate evaluation up
  Tunnel source 192.168.1.2 (Vlan100), destination 52.196.175.0
   Tunnel Subblocks:
      src-track:
         Tunnel1 source tracking subblock associated with Vlan100
          Set of tunnels with source Vlan100, 1 member (includes iterators), on interface <OK>
  Tunnel protocol/transport IPSEC/IP
  Tunnel TTL 255
  Tunnel transport MTU 1422 bytes
  Tunnel transmit bandwidth 8000 (kbps)
  Tunnel receive bandwidth 8000 (kbps)
  Tunnel protection via IPSec (profile “VTI”)
  Last input 19:27:49, output 18:54:11, output hang never
  Last clearing of “show interface” counters 3d17h
  Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 330
  Queueing strategy: fifo
  Output queue: 0/0 (size/max)
  5 minute input rate 0 bits/sec, 0 packets/sec
  5 minute output rate 0 bits/sec, 0 packets/sec
     12728 packets input, 1119256 bytes, 0 no buffer
     Received 0 broadcasts (0 IP multicasts)
     0 runts, 0 giants, 0 throttles
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
     68893 packets output, 4199880 bytes, 0 underruns
     0 output errors, 0 collisions, 0 interface resets
     0 unknown protocol drops
     0 output buffer failures, 0 output buffers swapped out
 permit ip host 172.16.1.1 host 172.16.1.2

以下, Config抜粋。

■ Cisco 抜粋
!
crypto isakmp policy 5
 encr aes 256
 hash sha256
 authentication pre-share
 group 14
 lifetime 3600
crypto isakmp key aws address A.A.A.A  255.255.255.255
crypto isakmp keepalive 30 30
!
!
crypto ipsec transform-set IPSEC esp-aes 256 esp-sha256-hmac 
 mode tunnel
!
crypto ipsec profile VTI
 set transform-set IPSEC
 set pfs group14

!
!
!
interface Tunnel1
 ip address 192.168.254.1 255.255.255.0
 ip mtu 1422   ! ← いらないかも。 不要でした。 ※
 ip ospf network broadcast
 ip ospf hello-interval 5
 keepalive 5 3
 tunnel source Vlan100
 tunnel mode ipsec ipv4
 tunnel destination A.A.A.A
 tunnel protection ipsec profile VTI

!
interface Vlan100
 ip address 192.168.1.2 255.255.255.0
 ip virtual-reassembly in
!
!
!
router ospf 1
 network 192.168.10.0 0.0.0.255 area 0
 network 192.168.254.0 0.0.0.255 area 0
!
!
ip access-list extended AWS_GRE
!
 permit ip host 172.16.1.1 host 172.16.1.2

※ VTIはMTUを自動計算するから設定は不要(Ciscoのページ参照

■ Vyos 抜粋
set interfaces loopback lo address ‘172.16.1.2/32’
set interfaces vti vti1 address ‘192.168.48.233/29’
set interfaces vti vti1 ip ospf dead-interval ’20’
set interfaces vti vti1 ip ospf hello-interval ‘5’
set interfaces vti vti1 ip ospf network ‘broadcast’
set interfaces vti vti1 ip ospf priority ‘1’
set interfaces vti vti1 ip ospf retransmit-interval ‘5’
set interfaces vti vti1 ip ospf transmit-delay ‘1’
set interfaces vti vti1 mtu ‘1422’

set protocols ospf area 0 network ‘192.168.254.0/24’
set protocols ospf area 0 network ‘10.10.20.0/24′
set protocols ospf log-adjacency-changes ‘detail’
set protocols static route 0.0.0.0/0 next-hop 10.10.10.1 distance ‘1’
—-
set vpn ipsec esp-group ESP_AWS compression ‘disable’
set vpn ipsec esp-group ESP_AWS lifetime ‘3600’
set vpn ipsec esp-group ESP_AWS mode ‘tunnel’
set vpn ipsec esp-group ESP_AWS pfs ‘enable’
set vpn ipsec esp-group ESP_AWS proposal 1 encryption ‘aes256’
set vpn ipsec esp-group ESP_AWS proposal 1 hash ‘sha256’
set vpn ipsec ike-group IKE_AWS dead-peer-detection action ‘hold’
set vpn ipsec ike-group IKE_AWS dead-peer-detection interval ’30’
set vpn ipsec ike-group IKE_AWS dead-peer-detection timeout ‘120’
set vpn ipsec ike-group IKE_AWS lifetime ‘3600’
set vpn ipsec ike-group IKE_AWS proposal 1 dh-group ’14’
set vpn ipsec ike-group IKE_AWS proposal 1 encryption ‘aes256’
set vpn ipsec ike-group IKE_AWS proposal 1 hash ‘sha256’
set vpn ipsec ipsec-interfaces interface ‘eth0’
set vpn ipsec logging log-modes ‘all’
set vpn ipsec nat-traversal ‘enable’
set vpn ipsec site-to-site peer Global IP authentication mode ‘pre-shared-secret’
set vpn ipsec site-to-site peer Global IP authentication pre-shared-secret ‘aws’
set vpn ipsec site-to-site peer Global IP authentication remote-id ‘192.168.1.2’
set vpn ipsec site-to-site peer Global IP connection-type ‘respond’
set vpn ipsec site-to-site peer Global IP ike-group ‘IKE_BB’
set vpn ipsec site-to-site peer Global IP ikev2-reauth ‘inherit’
set vpn ipsec site-to-site peer Global IP local-address ‘10.200.10.50’
set vpn ipsec site-to-site peer Global IP vti bind ‘vti1’
set vpn ipsec site-to-site peer Global IP vti esp-group ‘ESP_BB’

トンネル張った後に, 「OSPFでネイバーがーーー」ってなったけどMTUサイズがあっていなかったから。合わせればState Fullになる。

AWS上のVyosと家のC841とでGRE over IPSecを試す

ちょっとやりたいことあってAWSとIPSec張りたいなと。

構成はこんな。

OSPFは別にいらないんだけど,折角なんでダイナミックルーティングをまわしてみる。

簡単にいけるかなーとも思ったけどかなりハマった。双方NAT配下で家のほうはさらにグローバルはDHCP割当で変わるわPATだからNAT-Tやらなきゃだとか,まーいろいろ気にするポイントがあった。

けど,無事につながりました。
大きくハマった点は以下2つ。

・CiscoのIPSec用ACLでgre指定だとNG。ip 指定で解消。
・Vyosのremote-idでCiscoの実IPを入れてあげる。

Vyosはわかるんだが,CiscoのACLはなんでだ。わからん・・・。

VTIとかでやればACL不要だからいいのかと思ったが,これはこれでハマったので又今度。

Try&Errorをひたすら試すはめになりました。
いい勉強させていただきました。

■ Cisco 抜粋
!
crypto isakmp policy 5
 encr aes 256
 hash sha256
 authentication pre-share
 group 14
 lifetime 3600
crypto isakmp key aws address A.A.A.A  255.255.255.255
crypto isakmp keepalive 30 30
!
!
crypto ipsec transform-set IPSEC esp-aes 256 esp-sha256-hmac 
 mode tunnel

!
!
crypto map GRE_IPSEC 10 ipsec-isakmp 
 set peer A.A.A.A
 set transform-set IPSEC 
 set pfs group14
 match address AWS_GRE
!
!
!
!
interface Loopback1
 ip address 172.16.1.1 255.255.255.255
!
interface Tunnel1
 ip address 192.168.254.1 255.255.255.0
 ip mtu 1400
 ip tcp adjust-mss 1360
 ip ospf network broadcast
 ip ospf hello-interval 5
 keepalive 5 3
 tunnel source Loopback1
 tunnel destination 172.16.1.2
!
interface Vlan100
 ip address 192.168.1.2 255.255.255.0
 ip virtual-reassembly in
 crypto map GRE_IPSEC
!
!
!
router ospf 1
 network 192.168.10.0 0.0.0.255 area 0
 network 192.168.254.0 0.0.0.255 area 0
!
!
ip access-list extended AWS_GRE
!
 permit ip host 172.16.1.1 host 172.16.1.2
■ Vyos 抜粋
set interfaces loopback lo address ‘172.16.1.2/32’
set interfaces tunnel tun1 address ‘192.168.254.2/24’
set interfaces tunnel tun1 encapsulation ‘gre’
set interfaces tunnel tun1 ip ospf dead-interval ’20’
set interfaces tunnel tun1 ip ospf hello-interval ‘5’
set interfaces tunnel tun1 ip ospf priority ‘1’
set interfaces tunnel tun1 ip ospf retransmit-interval ‘5’
set interfaces tunnel tun1 ip ospf transmit-delay ‘1’
set interfaces tunnel tun1 local-ip ‘172.16.1.2’
set interfaces tunnel tun1 mtu ‘1400’
set interfaces tunnel tun1 multicast ‘enable’
set interfaces tunnel tun1 remote-ip ‘172.16.1.1’
set protocols ospf area 0 network ‘192.168.254.0/24’
set protocols ospf area 0 network ‘10.10.20.0/24′
set protocols ospf log-adjacency-changes ‘detail’
set protocols static route 0.0.0.0/0 next-hop 10.10.10.1 distance ‘1’
—-
set vpn ipsec esp-group ESP_AWS compression ‘disable’
set vpn ipsec esp-group ESP_AWS lifetime ‘3600’
set vpn ipsec esp-group ESP_AWS mode ‘tunnel’
set vpn ipsec esp-group ESP_AWS pfs ‘enable’
set vpn ipsec esp-group ESP_AWS proposal 1 encryption ‘aes256’
set vpn ipsec esp-group ESP_AWS proposal 1 hash ‘sha256’
set vpn ipsec ike-group IKE_AWS dead-peer-detection action ‘hold’
set vpn ipsec ike-group IKE_AWS dead-peer-detection interval ’30’
set vpn ipsec ike-group IKE_AWS dead-peer-detection timeout ‘120’
set vpn ipsec ike-group IKE_AWS lifetime ‘3600’
set vpn ipsec ike-group IKE_AWS proposal 1 dh-group ’14’
set vpn ipsec ike-group IKE_AWS proposal 1 encryption ‘aes256’
set vpn ipsec ike-group IKE_AWS proposal 1 hash ‘sha256’
set vpn ipsec ipsec-interfaces interface ‘eth0’
set vpn ipsec logging log-modes ‘all’
set vpn ipsec nat-traversal ‘enable’
set vpn ipsec site-to-site peer 0.0.0.0 authentication mode ‘pre-shared-secret’
set vpn ipsec site-to-site peer 0.0.0.0 authentication pre-shared-secret ‘aws’
set vpn ipsec site-to-site peer 0.0.0.0 authentication remote-id ‘192.168.1.2’
set vpn ipsec site-to-site peer 0.0.0.0 connection-type ‘respond’
set vpn ipsec site-to-site peer 0.0.0.0 ike-group ‘IKE_AWS’
set vpn ipsec site-to-site peer 0.0.0.0 local-address ‘10.10.10.50’
set vpn ipsec site-to-site peer 0.0.0.0 tunnel 1 esp-group ‘ESP_AWS’
set vpn ipsec site-to-site peer 0.0.0.0 tunnel 1 local prefix ‘172.16.1.2/32’
set vpn ipsec site-to-site peer 0.0.0.0 tunnel 1 remote prefix ‘172.16.1.1/32’

vyos登録

OpenStackのインスタンスにVyos欲しいから登録する。

1. isoイメージ取得
公式から取得。

2. KVM上にインストールしてイメージ変換する方法もあるのだが,自分のレベルではESXのvmdkを変換かけるほうがお手軽そうなので,ESX側でvyosをインストールしてVMを作る。

3. データストア上にあるvmdkファイルをCentOSへ持って行き(vyos-flat.vmdkとvyos.vmdk2つ)

qemu-imgコマンドを使う。
使い方はRedHatのページを参考。

qemu-img convert -f vmdk -O qcow2 ./vyos.vmdk ./vyos-1.1.7.qcow2
qemu-img convert -f vmdk -O qcow2 ./vyos.vmdk ./vyos-1.1.7.qcow2  0.79s user 3.79s system 20% cpu 22.574 total
# ls -lrt
-rw-r–r–  1 root     root    1073741824  4月 24 18:13 vyos-flat.vmdk
-rw-r–r–  1 root     root                496  4月 24 18:13 vyos.vmdk

-rw-r–r–  1 root     root      249102336  4月 24 18:20 vyos-1.1.7.qcow2

4. OpenStackのホストOS上でイメージ登録

# glance image-create --name vyos-1.1.7 --visibility public --disk-format qcow2 --progress --file ./vyos.qcow2  --container-format bare
[=============================>] 100%
+------------------+--------------------------------------+
| Property         | Value                                |
+------------------+--------------------------------------+
| checksum         | dbeddf1559bd9642241379b2ed835a1b     |
| container_format | bare                                 |
| created_at       | 2016-04-24T09:27:45Z                 |
| disk_format      | qcow2                                |
| id               | 684a2629-4257-4862-aa7a-cd9312e8047c |
| min_disk         | 0                                    |
| min_ram          | 0                                    |
| name             | vyos-1.1.7                           |
| owner            | f734caeac646458cb7c8d38ce8ee4522     |
| protected        | False                                |
| size             | 249102336                            |
| status           | active                               |
| tags             | []                                   |
| updated_at       | 2016-04-24T09:27:46Z                 |
| virtual_size     | None                                 |
| visibility       | public                               |
+------------------+--------------------------------------+

5. 終わり。
試しに起動してみる。
一応動くには動くが,インタフェースでNG。
ドライバあたりかな?
interfaceがadmin downなだけでした。
FloatingIPを設定して無事Pingもとおるところまで確認できました。

# set interface ethernet eth2
# set interface ethernet eth2 address dhcp
# set service ssh port 22

これでSSHまでOK。

—–

こちらのサイトを参考にさせてもらってKVMでやったほうが順当なのか。

インスタンスのリサイズができねー

と,思ったらConfig修正が必要であった。

参考)
https://ask.openstack.org/en/question/80600/resize-image-issue/

編集した後,nova-computeをリスタートしろと。

自分の場合,computeだけでは反映されなかったので,nova系はひとしきりrestartしたら出来た。

■ /etc/nova/nova.conf 編集
~以下2行追加~
allow_resize_to_same_host=True
allow_migrate_to_same_host = True

プロセス再起動
# systemctl restart openstack-nova-api.service
openstack-nova-cert.service openstack-nova-compute.service
openstack-nova-conductor.service openstack-nova-consoleauth.service
openstack-nova-scheduler.service

プロセスは多分全部やらんでいいんだと思う。
api, compute, scheduler くらいでいけんじゃないのかなんて勝手に思っています。

shutdown/reboot失敗

なんだかshutdown -h now とかrebootとかやるとたまーに落ちなくなる。

メッセージとしては

mdadm: Cannot remove ‘/lib/dracut/hooks/shutdown/30-dm-shutdown.sh’: Read-only filesystem or active volume grup?

というのが出まくって,それはもう “#cat 数Tのファイル”をやった時のような状態に陥って永遠と画面が流れ続ける。

色々とぐぐってみるのだが,fake raidで/boot領域をマウントしているからだーとか情報が出てくるのだが,イマイチしっくり来ない。

ただ,こちらのサイトで対処策が出ていたので試しにやってみるとうまくいった。
バグ情報にもっぽいのが出ているし,きっとそうなのだろう。
1年近く解消していないのね。