2022-11-14 · 6분
ネットワーク学習 1 — GRE と IPSec
ネットワークセキュリティの学習ノート。対称/非対称暗号と証明書(発行者、CDP/CRL)、GRE トンネリングプロトコルとそのヘッダー/MTU の注意点、そして IPSec VPN の設定フロー(IKE フェーズ 1/2、transform-set、crypto map)を段階的に。
2022-11-15 · 9분
この記事は公開から2年以上経過しています。

今日進めたトポロジ
DNS、WEB サーバー構築や SSL 適用のようなことを進めました。
Debian 11.5(CLI)をサーバーとして始めました。
apt install vim bind9
上のコマンドで、入っていない vim と bind9 をインストールしました。基本的なオプションを与えるため named.conf.options で進めます。/etc/bind/named.conf.options で編集します。

allow-recursion { any; }; だけ追加します。そして同じパスで named.conf.local に追加します。

内部網と外部網を分けて進め、上の ACL は HQ を基準に互いの情報を知る IP たちの集まりです。
次に上の zone ファイルを設定します。まず /var/cache/bind/korea.com.inter.zone です。何も設定がない場合、相対パスで書くと /var/cache/bind/[file] に入るので、必ず絶対パスで書く必要はありません。

Domain は korea.com で進めました。ca、hq、br1、br2 のように router 機器の IP たちで、www は Web サーバーです。

Router 機器はそれぞれのループバックアドレスで、サーバーだけ外部ゲートウェイアドレスです。

すべて正しく設定していれば、上のコマンドを打ったとき IP が正常に表示されるのが確認できます。
apt install isc-dhcp-server -y
上のコマンドで追加で dhcp server パッケージをインストールします。そして /etc/dhcp/dhcpd.conf ファイルを直します。

上の 2 つを、先ほど設定した DNS どおりに変更します。

そして配布する IP の帯域を決めます。これで再起動すれば完了です。

Windows 11 で ipconfig /renew で dhcp を取得するとき、設定どおり 100 ~ 199 の間の IP が取れ、DNS が korea.com できちんと取れているのが分かります。ping と DNS クエリもとてもよく通ります。

ネットワークで使うトポロジです。HQ と 3 つの領域で構成されたネットワークです。eigrp でルーティングされていますが、内部網と IP 帯域が異なるため現在はルーター同士のみ通信可能で、内部 PC 同士は通信できません。HQ と残りの領域を GRE トンネルと DMVPN を使って通信できるよう設定しようとしています。
[ HQ ]
1. ip address 10.0.0.1 255.255.255.0
2. ip nhrp authentication [key] # 私たちはやらない
3. ip nhrp map multicast dynamic
4. ip nhrp network-id [number]
5. ip ospf network point-to-multipoint # 私たちは eigrp を使うのでやらない
6. tunnel source [loop-back | source interface ip]
7. tunnel mode gre multipoint
8. tunnel key [number]
9. ip nhrp holdtime [seconds, default 7200]
1. Tunnel Interface で使う IP を割り当てます。
2. nhrp 認証で使う key を入力します。
3. トンネルを通して multicast traffic を伝達可能にします。この設定がないと Dynamic routing protocol が正常に動作しません。
4. DMVPN Network で唯一の識別子であり、異なる場合は通信不可能です。
5. OSPF の network type を変更したものです。ただし私たちは eigrp を使うので不要です。
6. tunnel source は外部からルーティングできる IP を設定すればよく、その IP は後で Spoke router の multicast map で使われます。
7. gre mode は multipoint に指定します。
8. 複数の multipoint gre を構成する場合、区別する数字を設定します。
9. NHRP map の hold time を指定します。
★ GRE と違い mGRE の場合、tunnel の目的地設定が存在しません。multipoint 構造のため tunnel 構成は動的に行われるからです。
[BR1]
1. ip address 10.0.0.2 255.255.255.0
2. ip nhrp authentication [key] # 私たちは使わない
3. ip nhrp map multicast [hub router ip]
4. ip nhrp map [hub router tunnel ip] [hub router ip]
5. ip nhrp network-id 1
6. ip nhrp nhs [hub router ip]
7. tunnel source [this spoke router ip]
8. tunnel mode gre multipoint
1. Tunnel interface で使う IP を割り当てます。
2. nhrp 認証に使う key 値を指定します。
3. トンネルを通して multicast traffic を伝達可能にします。この設定がないと dynamic routing protocol が正常に動作しません。hub router の設定と少し違い、multicast が伝達される ip アドレスを指定すればよいです。
4. このコマンドは静的に nhs のアドレスと物理的にマッピングする役割をします。
5. DMVPN Network で唯一の識別子であり、異なる場合は通信不可能です。
6. NHS(Next Hop Server)設定を行い、hub の tunnel アドレスを設定します。
7. tunnel source は外部からルーティングできる IP を設定すればよいです。
8. gre mode は multipoint に指定します。
★ ip nhrp map multicast の IP 設定を hub router の tunnel ip に設定すると、OSPF Neighbor が切れて繋がる現象が発生します。
EIGRP ルーティング接続で行う場合、問題が生じます。hub router はすべての spoke router に関する routing table が存在しますが、spoke router 同士は routing table が存在しません。その理由は Split-horizon のためです。
Split-horizon は、特定のインターフェイスで広告を受け取った情報を、再びそのインターフェイスへ広告しない特性です。(Loop を防ぐ目的で有効になっています。ただし hub & spoke 区間で 1 つのインターフェイスでハブを構成した場合は、必ず無効化してこそ Spoke router 同士で情報交換が可能になります)
無効化方法
[HQ]
int tunnel0
no ip split-horizon eigrp [number]
eigrp で他の spoke たちと tunnel で接続した番号を書いておけばよいです。
[HQ]
conf t
crypto isakmp policy 1
authentication pre-share
encryption aes
hash sha
group 14
!
crypto isakmp key [key] address 0.0.0.0 0.0.0.0
crypto ipsec transform-set [transform-set name] esp-aes esp-sha-hmac
mode transport
!
crypto ipsec profile [crypto ipsec profile name]
set transform-set [transform-set name]
!
int tunnel 0
tunnel protection ipsec profile [crypto ipsec profile name]
!

上にあった説明を全部設定し、それに加えて loopback 1 に 11.11.11.11 IP を割り当て、ca.korea.com IP -> 11.11.11.11 への static NAT 設定だけすればよいです。
ip nat inside source static 192.168.10.1 11.11.11.11

では上の写真のようにトポロジに合わせて external DNS の設定を変えます。
[QH]
ip domain-name koera.com
ip name-server 192.168.10.1
ip domain-lookup
[BRn]
ip domain-name korea.com
ip name-server 11.11.11.11
ip domain-lookup
上のコマンドを各ルーターに合わせて書きます。その次に QH、BRn から ca.korea.com へ ping を送ってみましょう。
HQ#ping ca.korea.com
Translating "ca.korea.com"...domain server (192.168.10.1) [OK]
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.10.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/4 ms
BR1#ping ca.korea.com
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 11.11.11.11, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 9/10/11 ms
きちんと通るのが確認できます。では HQ で秘密鍵を生成します。
BR1(config)#crypto key generate rsa modulus 2048 label hq.korea.com
BR1(config)#do show crypto key mypubkey rsa
% Key pair was generated at: 11:16:04 UTC Nov 16 2022
Key name: hq.korea.com
Key type: RSA KEYS
Storage Device: not specified
Usage: General Purpose Key
Key is not exportable.
Key Data:
30820122 300D0609 2A864886 F70D0101 01050003 82010F00 3082010A 02820101
0096EB32 E01FE12D FDE8A0B5 BF8D8946 6BC4038E 6A475887 7C6D7D12 5C34965E
4A85B8F3 1475070E 2BD6F884 71CEB2B5 0274981A EC72EB89 C00FBE42 7809F0B1
1A64CAE4 11DA46D8 C134F19A 13A31858 79E76C5E 873A737E 61C2951E C636992E
E6A8F4C9 91112879 38D8E1BF 6D4F0B05 FCE4038E 0057E5AF 28A5926D 202C1DEE
9E2DF748 FA5E0195 57EB06A4 B7A5631B 592C2373 6BFC28DD C60378E3 4BBA18C7
72764B8E 056823CA C0965051 E815A149 25DA8BCA 95E2A1EA B0D1FACF 2F0B544B
2D944AB5 86D4E5C8 1ED478F9 5651033D D619FDB9 7BEB0A43 873FF837 39F64280
AE15806C 614C1490 16ED401F 60F720BF D9AF08A1 D5685189 C7340701 482B7322
87020301 0001
% Key pair was generated at: 11:16:04 UTC Nov 16 2022
Key name: hq.korea.com.server
Key type: RSA KEYS
Temporary key
Usage: Encryption Key
Key is not exportable.
Key Data:
307C300D 06092A86 4886F70D 01010105 00036B00 30680261 009262AF 24199DF1
4BE4C0C7 EFBC123F 13F8E55E 017E1D9F 804E6AB5 7F7FB2B8 5C6C5F50 512282BF
ADAD3AF1 8ADBA977 0FA03545 C521C587 B74A9865 A8C9C4FF 08159C65 44FECDE7
7583F06F 92272C3B 685907CD 8B1FD048 FD1D3614 30E59295 23020301 0001
上のようにきちんと生成されたのが確認できます。そして server 証明書で暗号化を行うときは、常に router と現在時刻を合わせる必要があります。そのため KST +9 時間で QH router の clock を変更します。
BR1(config)#clock timezone KST +9
BR1(config)#do cl
BR1(config)#do show clock
*20:18:42.325 KST Wed Nov 16 2022
現在時刻にきちんと合いました!では ca.korea.com を trustpoint にする必要があります。
HQ(config)#crypto pki trustpoint korea-CA
HQ(ca-trustpoint)#enrollment url ftp://ca.korea.com pem
HQ(ca-trustpoint)#subject-name CN=hq.korea.com,C=KR,O=GIFTS
HQ(ca-trustpoint)#rsakeypair hq.korea.com
HQ(ca-trustpoint)#ip-address none
HQ(ca-trustpoint)#revocation-check crl none
HQ(ca-trustpoint)#fqdn hq.korea.com
HQ(ca-trustpoint)#serial-number none
ftp でサーバーと証明書をやり取りするため、enrollment で ftp サーバーを指定します。このとき trustpoint の korea-CA という名前は Root 認証と名前が同じでなければならないそうです。下の写真参照。

その後 ca.korea.com サーバーで vsftpd と ftp を入れます。ftp はテストのためインストールします。その後 /etc/vsftpd.conf に入って簡単な設定を変えます。
apt install vsftpd ftp -y

31 番と 35 番がコメントになっているので、これらを消します。私たちは証明書を取ってこなければならないので write 権限が必要だからです。その後 ftp 用のユーザーも作ります。
adduser -gecos "" router
誤字はありません。全部入力する必要があります。その後 ftp localhost というコマンドを打ってから router アカウントでログインしてみましょう。

今私はログインして ls を打ったとき何かありますが、たぶん初めて作ったアカウントなら何もないはずです。とにかくきちんと動作するのを確認しました。
HQ(config)#ip ftp username router
HQ(config)#ip ftp password Pa$$worD
HQ で上のコマンドを入力して ftp アカウント登録をする必要があります。その後、下のコマンドを入力して HQ ルーターで生成された key を渡します。
HQ(config)#crypto pki enroll korea-CA
% Start certificate enrollment ..
% The subject name in the certificate will include: CN=hq.korea.com,C=KR,O=GIFTS
% The subject name in the certificate will include: hq.korea.com
Send Certificate Request to file system? [yes/no]: yes
% Certificate request sent to file system
% The 'show crypto pki certificate verbose korea-CA' commandwill show the fingerprint.
HQ(config)#!
*Nov 16 11:50:18.435: CRYPTO_PKI: Certificate Request Fingerprint MD5: A8B5DCC3 285EE903 3B2A3ABA CD62A14E
*Nov 16 11:50:18.435: CRYPTO_PKI: Certificate Request Fingerprint SHA1: 21223EF1 F284BEDD 701DD7C5 11C78563 4CAFCE04
上のようにコンソール画面に表示されれば成功です。サーバーで確認してみましょう。

korea-CA.req ファイルが存在するのが分かります。ではこの key を使って ca 署名を行います。
openssl ca -in korea-CA.req -out korea-CA.crt

下の Sign the certificate? で Y を押すと無事に生成されます。あのパスワード入力や完全なエラーが出るなら、下のポスターを見てください。

korea-CA.crt 証明書ができたのが確認できます。では root korea-CA.crt 証明書を、現在この ftp user のパスに korea-CA.ca という名前でコピーします。
!> ****](https://peemangit.tistory.com/125)
参考 もっと見る https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=roser111&logNo=221204422142 > [Dynamic Multipoint VPN (DMVPN)](https://m.blog.naver.com/PostView.naver?isHttpsRedir
— peemangit.tistory.com
原文(韓国語): tistory — 2022-11-15 公開、当ブログへ移行。この翻訳は AI の協力で作成されました。
…