Cisco Roadshow “Next Gen” ~ ルータ、スイッチ、ワイヤレス を売りにいこう!~ ルータラボ編(前半) シスコシステムズ 合同会社 2015/4 Agenda • Lab構成に関して • Lab -1 初期キッティング • Lab -2 運用管理機能 • • 1-1: USBブート • 1-2: Cisco Configuration Professional Expressを利用 • • 2-1: IOS組込 コンフィグ管理機能 • コンフィグ情報の世代管理 • コンフィグの差分比較 • コンフィグの置換え 2-2: トラフィックの見える化 • NetFlow • IP SLA 2-3: EEM • 2-4: オプションラボ Lab-1 • Lab -1 初期コンフィグ投入 • 1-1: USBブート • • ルータアクセス用の設定を行います 1-2: Cisco Configuration Professional Expressを利用 • WANインタフェース(PPPoE) • DMVPN の設定を行います xはPod番号に置き換えてください Lab物理構成について(Pod1 - 5) Router 192.168.100.1 DMVPN HUB Router 10.0.x.254 Center SW PPPoE Server 10.0.x.0/24 891F 192.168.x.0/24 Pod1 Pod2 Pod3 Pod4 Pod5 xはPod番号に置き換えてください Lab物理構成について(Pod6 - 10) Router 192.168.100.1 DMVPN HUB Router 10.0.x.254 Center SW PPPoE Server 10.0.x.0/24 891F 192.168.x.0/24 Pod6 Pod7 Pod8 Pod9 Pod10 Lab構成について(Pod1 - 5) WWW メールサーバ DMVPN HUB VPNトンネル Webサーバ PPPoE Server PPPoE Pod-6 拠点A (Pod1) Pod-7 拠点B (Pod2) Pod-8 拠点C (Pod3) Pod-9 拠点D (Pod4) 拠点E Pod-10 (Pod5) Lab構成について(Pod6 - 10) WWW メールサーバ DMVPN HUB VPNトンネル Webサーバ PPPoE Server PPPoE Pod-6 拠点F (Pod6) Pod-7 拠点G (Pod7) Pod-8 拠点H (Pod8) Pod-9 拠点I (Pod9) 拠点J Pod-10 (Pod10) xはPod番号に置き換えてください Lab環境について • Pod番号と機器に設定されているIPアドレスの対応は以下のとおりです Pod ルータ(WAN) ルータ(LAN) 1 10.0.1.1-10 192.168.1.254/24(VLAN1) 2 10.0.2.1-10 192.168.2.254/24(VLAN1) 3 10.0.3.1-10 192.168.3.254/24(VLAN1) 4 10.0.4.1-10 192.168.4.254/24(VLAN1) 5 10.0.5.1-10 192.168.5.254/24(VLAN1) 6 10.0.6.1-10 192.168.6.254/24(VLAN1) 7 10.0.7.1-10 192.168.7.254/24(VLAN1) 8 10.0.8.1-10 192.168.8.254/24(VLAN1) 9 10.0.9.1-10 192.168.9.254/24(VLAN1) 10 10.0.10.1-10 192.168.10.254/24(VLAN1) ※WANインタフェースのアドレスは自動で払いだされます サーバ アドレス PPPoE 10.0.x.254 DMVPN 10.0.100.1 本社LAN 192.168.100.1 ルータはIOS 15.5(2)Tを使用しています PCへのログイン • PCへログインします • PCのユーザ名とパスワード ユーザ名:training • パスワード:training • ルータへのログイン • PCからコンソールケーブルを用いて接続します • Tera Termを開いてください シリアルを選択 • ポート:USB Serial Portを選択 • CLIの使い方例 showコマンドで確認するとき特権モードで行ってください Pod1_USB-Boot# <-- #となっている状態です Pod1_USB-Boot> Pod1_USB-Boot>enable Pod1_USB-Boot# Pod1_USB-Boot# Pod1_USB-Boot#show ? aaa Show AAA values aal2 Show commands for AAL2 access-expression List access expression access-lists List access lists acircuit Access circuit info adjacency Adjacent nodes Pod1_USB-Boot# Pod1_USB-Boot# Pod1_USB-Boot#conf t Enter configuration commands, one per line. End with CNTL/Z. Pod1_USB-Boot(config)# コンフィグ設定は、グローバルコンフィグレーションモードで行います Pod1_USB-Boot(config)# Pod1_USB-Boot(config)# <-- (config)#となってる状態です ホスト名 ※コマンドは、文字を全て打ち込まなくてもTab保管が可能です 初期コンフィグ投入 -1 USBブート 1-1 USBメモリを利用した初期コンフィグ投入 ・現地での作業はできるだけ少ない工程で行いたい ・さらに、CLIが分からなくてもコンフィグ投入が出来るようにしたい ・USBメモリを利用した初期初期コンフィグ投入を利用! ・作業者はCLIを開かずにコンフィグ投入が可能 USBメモリを利用した初期コンフィグ投入 • 以下の条件を満たす場合、ルータはUSBメモリの中に入ったコンフィグ情報を 読み込んで起動します • NVRAMにstartup configurationがない(初期化された状態) • “.cfg”形式のファイルがUSBフラッシュにある • ファイルの中身がASCIIテキスト形式で正しいコンフィグで構成されている • シスコ純正のUSBフラッシュを使用している • ルータの1つ目のUSBスロットにUSBが挿入されている • 対応型番:C88X(non 4G, non WLAN), C89X(non LTE) ※複数の.cfg形式のファイルがUSBにあるときは、最も高いIndexとなっているファイルが選択されます 参考URL http://www.cisco.com/c/dam/en/us/td/docs/routers/access/800/hardware/deployment/guide/deployguide800.pdf 1-1 USBメモリを利用した初期コンフィグ投入 ラボ概要 USBメモリを利用して、初期状態のルータにコンフィグを投入します • PCで投入するコンフィグファイルを作成 • ルータにUSBメモリを挿入しリロード (ラボのため、起動済みのルータでUSBメモリの中身を確認します) • USBで用意した設定情報がルータに反映されていることを確認 ※このスライドはラボ全体の流れを説明したスライドです 詳細は次ページ以降に記載しています xはPod番号に置き換えてください 手順1 初期コンフィグ投入の準備 1. PCの”config”フォルダに”Podx_USB-Boot.cfg”というファイルがあることを確認して下さい 2. テキストエディタで”Podx_USB-Boot.cfg”を開いてください 3. “Podx_USB-Boot.cfg”に起動後に動作させる設定情報を確認してください 4. USBメモリをPCに接続し、設定内容を確認したファイルを移してください 次スライド以降で今回追加する内容を紹介していきます ※今回は次のLabで使用するCCP Express用のコンフィグを追加しています 実際のキッティングでは、最終的に動作させたい設定情報を記載することが可能です USBブートで読み込むファイルは”.cfg”形式で構成されている必要があります xはPod番号に置き換えてください 手順1 ホスト名・DHCP設定の確認 ※Podx_USB-Boot.cfgに記載済みの内容になっています、内容を確認して下さい hostname Podx_USB-Boot ルータに設定するホスト名を記載 clock timezone JST 9 0 日本時間のタイムゾーンを指定 vrf definition MGMT address-family ipv4 exit-address-family 管理用の仮想ネットワークを作成 ※VRF(Virtual Routing and Forwarding): レイヤ3ルーティング/フォワーディングテーブルを仮想化する機能です。 1台のルータ上で、複数の「仮想的な」ルーティングテーブル(RIB)およびフォワーディングテーブル(FIB)を構築することが出来ます。 仮想テーブル毎に、独立したアドレッシング/経路選択/経路ポリシー等の設定が可能です。 例) 管理ネットワークと業務ネットワーク毎に仮想的なRIB/FIBテーブルを構築し分離。 xはPod番号に置き換えてください 手順1 ホスト名・DHCP設定の確認 ※Podx_USB-Boot.cfgに記載済みの内容になっています、内容を確認して下さい ip dhcp excluded-address 192.168.x.254 ip dhcp excluded-address vrf MGMT 192.168.254.254 ip dhcp pool CCP_Express vrf MGMT network 192.168.254.0 255.255.255.0 default-router 192.168.254.254 ip dhcp pool LAN network 192.168.x.0 255.255.255.0 default-router 192.168.x.254 dns-server 10.0.x.254 DHCP配布除外アドレスを指定 管理セグメント用のDHCPを設定 LANセグメント用のDHCPを設定 username cisco privilege 15 password 0 cisco ルータアクセス用のユーザ名・パスワードを設定 ※このラボでは、LAN用と管理用で2つのDHCPレンジを設定します xはPod番号に置き換えてください 手順1 管理者向けルータ接続用設定の確認 ※Podx_USB-Boot.cfgに記載済みの内容になっています、内容を確認して下さい interface FastEthernet0 vrf forwarding MGMT ip address 192.168.254.254 255.255.255.0 管理インタフェースを作成 interface Vlan1 ip address 192.168.x.254 255.255.255.0 LANインタフェース向けの 仮想インタフェースを作成 ip http server ip http authentication local ip http timeout-policy idle 60 life 86400 requests 10000 end ルータへHTTP接続を許可する設定 xはPod番号に置き換えてください 手順2 ルータに設定されている設定、USBメモリの確認 1. Tera Termを起動し、ルータのコンソールに接続してください (このラボでは、ルータからUSBメモリに入っているファイルを確認するため、ルータは起動した状態に なっています) 2. “Podx_USB-Boot.cfg”が入ったUSBメモリをルータに挿入して下さい 3. “show usbflash0:”を入力し、USBメモリが挿入されていることを確認して下さい 4. USBメモリに作成した“Podx_USB-Boot.cfg”が存在することを確認して下さい 5. “more usbflash0:Podx_USB-Boot.cfg”からファイルの中身が確認可能です (次のスライドにファイル内容確認のサンプルが記載されています) ※本番環境では、USBを挿入しルータの電源を入れるだけで完了します 手順2 USBメモリの内容確認 Router#more usbflash0:Pod3_USB-Boot.cfg hostname Pod1_USB-Boot vrf definition MGMT address-family ipv4 exit-address-family interface FastEthernet0 vrf forwarding MGMT ip address 192.168.254.254 255.255.255.0 interface Vlan1 ip address 192.168.1.254 255.255.255.0 ip dhcp excluded-address vrf MGMT 192.168.254.254 ip dhcp pool CCP_Express vrf MGMT network 192.168.254.0 255.255.255.0 default-router 192.168.254.254 ip http server ip http authentication local ip http timeout-policy idle 60 life 86400 requests 10000 clock timezone JST 9 0 end ip dhcp pool LAN network 192.168.3.0 255.255.255.0 default-router 192.168.1.254 dns-server 10.0.1.254 username cisco privilege 15 password 0 cisco 手順3 ルータの初期化と再起動 1. ルータにアクセスし、”erase startup-config”を入力して下さい 2. ”reload”を入力、ルータを再起動して下さい ルータを初期化 Router#erase startup-config Erasing the nvram filesystem will remove all configuration files! Continue? [confirm] [OK] Erase of nvram: complete Router# ルータを再起動 現在の設定情報を保存するか Router#reload 聞かれるので、“no”を入力 System configuration has been modified. Save? [yes/no]: no Proceed with reload? [confirm] ※この手順で、ルータを初期化後に再起動し、USBに入れたコンフィグ情報からブートします xはPod番号に置き換えてください 手順4 投入された設定情報の確認 -1 USBブートを実施すると、起動中に次のログが出力されます このログが出力されることを確認して下さい 1. *Apr 1 12:16:05.695: %USBFLASH-5-CHANGE: usbflash0 has been inserted! *Apr 1 12:16:20.071: %SYS-5-CONFIG_I: Configured from memory by console ルータの起動後、以下の項目を確認して下さい 1. • • • ホスト名が”Podx_USB-Boot”となっていること “show running-config”でUSBメモリにいれた”Podx_USB-Boot.cfg”と同じ設定になっていること “show startup-config”でstartup-configに設定が保存されていること 手順4 投入された設定情報の確認 -2 1. PCとルータのFastEthernet0(ポート部分にはFE WANと記載されています)を接続して下さい 2. PCが192.168.254.0/24(管理ネットワーク)が配布されることを確認してください ※実際の運用では、コンソールを表示せずにPCにアドレスが配布されることを確認して、USBブートが成功したか判断可能 です 以上でUSBブートのラボは終わりです 初期コンフィグ投入 -2 CCP Express Cisco Configuration Professional Express 1-2 CCP Expressを利用した初期コンフィグ投入 ・コンソール接続なしに、ルータの初期セットアップを行いたい ・初期設定は誰でも出来るような手順で行いたい! ・セキュリティの観点から、USBを現地に持って行くことは許容 されない ・CCP Expressを利用し、GUIにより初期設定! ・CCP ExpressのGUIアクセス用の設定は、オーダの段 階で選択可能 ・日本語版GUIもじきリリース予定 1-2 CCP Express ラボ概要 このラボでは、CCP Expressを利用したGUIベースのキッティングを行います • CCP Express接続用に必要な初期設定の確認 • CCP Expressを利用しWANインタフェース(PPPoE)を設定 • CCP Expressを利用しVPNを設定 ※このスライドはラボ全体の流れを説明したスライドです 詳細は次ページ以降に記載しています CCP Express GUIアクセスに必要なルータの設定 • CCP ExpressのGUI接続には、3つの設定が最低必要です • PC接続インタフェースの設定 • HTTP or HTTPSポートの開放 • HTTP or HTTPSアクセス用のユーザ名・パスワード • [Option]PC配布用DHCPの設定(PCにスタティックアドレスを使用することも可能) ※本日のラボでは、この設定がラボ1-1でされています オーダーの段階で設定投入済みの出荷が可能です! 手順1 CCP Express WebGUIへのアクセス 1. PCとルータのFastEthernet0(ポート部分にはFE WANと記載されています)を接続して下さい 2. Firefoxを起動し、”192.168.254.254”へアクセスして下さい (Lab1-1で192.168.254.0/24のアドレスが取得していることは確認済みです) 3. ユーザ名・パスワードはcisco/ciscoです CCP Express Top画面 利用規約のポップアップが出現した場合は ”Yes”を選んでください ※本日のラボでは、Beta版のバージョン3.1を利用しています WANインタフェースの設定 • CCP Expressを利用して、WAN回線のPPPoEを設定します 初期状態 PPPoEセッションの構築 手順2 WANインタフェースの設定 “Interfaces and Connection”を選択し、インタフェースの設定画面へ 移動します 1. ※インタフェース設定で可能なこと • WANインタフェース • LANインタフェース (スイッチポート・ルーテッドポート) • 仮想インタフェース • ループバックインタフェース 手順2 WANインタフェースの設定 1. GigabitEthernet8を選択し、EDITをクリック 2. GigabitEthernet8の編集画面がポップアップで出現します 手順2 WANインタフェースの設定 1. Primary WAN Interfaceを指定 2. Move to WAN Zoneを指定 この段階ではOKをクリックしないでください WANゾーンに指定するとアラートが出現します Yesを選択して下さい 手順2 WANインタフェースの設定 1. PPPoEを有効化 (Descriptionは何を入れても構いません) この段階ではOKをクリックしないでください IPv4アドレス 2. • Type: Easy IP(IP Negotiated) • Enable NAT: チェックボックスはついたままにしてください この段階ではOKをクリックしないでください xはPod番号に置き換えてください 手順2 WANインタフェースの設定 PPPoEの認証情報を入力 1. 認証方式:CHAP • ユーザ名:[email protected] • パスワード:cisco123 “Show Advance”をクリック • MTU:1454 • MSS:1356 • 1. 最後にOKを選択し、変更する設定を投入してください ※このラボではIPv4のみを利用するため、IPv6の設定はしません 手順2 WANインタフェースの設定 1. Dialer1が作成され、10.0.x.0/24が配布されることを確認してください アドレスの配布には少し時間がかかります。 情報を更新するために、ブラウザをリフレッシュして下さい 手順2 WANインタフェースの設定 1. “Troubleshoot”タブを選択して下さい 2. PPPoEサーバへPingを行い、疎通を確認して下さい xはPod番号に置き換えてください • Source: Dialer1 • Destination: 10.0.x.254 ※PPPoEサーバのアドレスは Pod毎に異なります 以上で、WANインタフェースの PPPoE設定が終わりました TroubleshootタブではPingと Tracerouteが実行可能です Successとなれば疎通できています DMVPNの設定 • 続いてPod間の通信を行うため、VPN HubルータとDMVPNを構築します PPPoEのみを設定 DMVPNを設定 DMVPN(Dynamic Multipoint VPN): VPN接続を行う技術の1つ プロバイダの契約により、拠点では固定的なアドレスが指定出来ない場合があります。通常VPN接続には相互にIPア ドレスを指定する設定が必要ですが、DMVPNではその必要がありません。拠点ルータは本社の固定IPアドレスを指 定するだけで、自身のIPアドレスを考慮することなくVPN接続を構築することが可能です。 ※本社側は固定IPアドレスが必須です 手順3 DMVPNの設定 1. “Security”タブを選択してください DMVPNの設定は、Securityの項目から行います 手順3 DMVPNの設定 1. DialerインタフェースがZone WANに設定 されていることを確認して下さい 2. Vlan1をZone LANに指定して下さい ※ドラッグアンドドロップで移動可能です Dialerインタフェースはラボ1で Zone WANに設定されています 3. 最後の右上の”Apply”をクリックして下さい 手順3 DMVPNの設定 1. “VPN”タブを選択してください 2. “DMVPN spoke”を選択し、”Enable”にチェックを入れてください 3. “Spoke”と”Hub”に必要な値を入力して下さい xはPod番号に置き換えてください Spoke トンネルIP: 172.16.1.x/24 • リモートサブネット: 192.168.x.0/24 Hub • • • 4. ハブルータのアドレス: 10.0.100.1 トンネルアドレス: 172.16.1.100 右下の”Next”をクリックして下さい リモートサブネットの サブネットマスク 手順3 DMVPNの設定 VPN Profileの設定をして下さい 1. • IKEv2を選択 • Preshared Key:cisco123 2. 右下の“Next”をクリックして下さい Routingの設定をして下さい 1. • 2. EIGRP Autonomous No(AS番号): 1 右下の“Finish”をクリックして下さい 手順3 DMVPNの設定 1. トンネルが緑色になることを確認してください • • DMVPNのセッションが構築されると、トンネル部分が緑色になります この状態でPodルータはVPN終端ルータとVPNセッションが構築された状態になりました Policy設定 • 各Podルータ配下のLANネットワークが、DMVPNセッションを利用して他セグメントへの疎通 を可能にするために、ポリシー設定を行います インタフェースをグループ化 グループ間通信の制御を定義 ※ここでは、ZBFW(Zone Based Firewall)の設定を行います ZBFW: インタフェースをZone(WAN/LAN/VPN/DMZ)と呼ぶグループに分類し、グループ間のポリシーを定義すること でグループ間の通信制御(ポートやアプリケーション等)を行う事が可能です。複数のインタフェースを1つのグループ に集約可能なため、通信制御の設定を簡単に行うことができます。 手順4 Policy設定 1. “Policy”タブを選択して下さい 2. “Add”を選択して下さい Zone LANとZone VPN間の通信設定 手順4 Policy設定 1つ目のPolicyを設定して下さい 1. • • • • • Policy Name: DMVPN_LAN_VPN Policy Description: 変更なし Action: Allow Source Zone: LAN Destination Zone: VPN この段階ではSaveをクリックしないでください Zone LANとZone VPN間の通信設定 手順4 Policy設定 1. Networkタブを選択して下さい 2. Source Networksの設定をして下さい • • ※通信を許可するNetworkを設定しています Source Networks Destination Networks ->どちらもデフォルトのANY この段階ではSaveをクリックしないでください Zone LANとZone VPN間の通信設定 手順4 Policy設定 ※通信を許可するApplicationを設定しています 1. Applicationタブを選択して下さい 2. Available Applicationの検索ウィンド に”icmp”を入力し検索して下さい 3. 検索結果で該当した”icmp”を ドラッグアンドドロップでSelected Applicationに移動して下さい 4. 同様の手順でdnsもSelected Application に移動して下さい ※このラボでは”icmp”と”dns”を許可します 5. 最後に”Save”を選択して下さい 許可するアプリケーションを ドラッグアンドドロップ Zone LANとZone WAN間の通信設定 手順4 Policy設定 ※通信を許可するNetworkを設定しています 2つ目のPolicyを設定して下さい 1. • • • • • Policy Name: DMVPN_LAN_WAN Policy Description: 変更なし Action: Allow Source Zone: LAN Destination Zone: WAN この段階ではSaveをクリックしないでください Zone LANとZone WAN間の通信設定 手順4 Policy設定 1. Networkタブを選択して下さい 2. Source Networksの設定をして下さい • • ※通信を許可するNetworkを設定しています Source Networks Destination Networks ->どちらもデフォルトのANY この段階ではSaveをクリックしないでください Zone LANとZone WAN間の通信設定 手順4 Policy設定 1. Applicationタブを選択して下さい 2. Available Applicationの検索ウィンド に”icmp”を入力し検索して下さい 3. 検索結果で該当した”icmp”を ドラッグアンドドロップでSelected Applicationに移動して下さい 4. 同様の手順でdnsもSelected Application に移動して下さい ※このラボでは”icmp”と”dns”を許可します 5. 最後に”Save”を選択して下さい ※通信を許可するApplicationを設定しています 許可するアプリケーションを ドラッグアンドドロップ ここまでの設定で、全てのPod間でPingによる通信が可能になりました 注)ここでは例として、 Pod1から他拠点への接続 イメージを記載しています DMVPN HUB VPNトンネル PPPoE Server Ping Pod-6 拠点A (Pod1) PPPoE Pod-7 拠点B (Pod2) Pod-8 拠点C (Pod3) Pod-9 拠点D (Pod4) 拠点E Pod-10 (Pod5) xはPod番号に置き換えてください DMVPN動作の確認 • [PCでの操作] ルータのFE WANに接続されているケーブルを、GE 0に差し替えてください 2. コマンドプロンプトで”ipconfig”を入力し、192.168.x.0/24を取得していることを 確認して下さい 1. 192.168.254.0/24のアドレスになっている場合は、 コマンドプロンプトで次の2つのコマンドを入力 してください ・“ipconfig /release” ・“ipconfig /renew” xはPod番号に置き換えてください 手順5 DMVPN動作の確認 • [ルータ上での操作] Tera Termを立ち上げ、コンソールを開いてください 2. “show ip route eigrp”を入力し、自分のPod以外の192.168.x.0が見れることを 確認して下さい 1. Pod2_USB-Boot#sh ip route eigrp Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2 i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2 ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP a - application route + - replicated route, % - next hop override Gateway of last resort is 0.0.0.0 to network 0.0.0.0 D 192.168.1.0/24 [90/28160256] via 172.16.1.1, 00:06:03, Tunnel0 D 192.168.100.0/24 [90/27008000] via 172.16.1.100, 00:06:03, Tunnel0 Pod2_USB-Boot# xはPod番号に置き換えてください 手順5 DMVPN動作の確認 • [PCでの操作] DMVPNハブとの疎通を確認します 2. 192.168.100.1 にPingを行い、疎通を確認して下さい 1. 同じタイミングでDMVPNの設定が完了していれば、他Podのルータへも疎通が 確認可能です 2. 192.168.x.254にPingを行い、疎通を確認して下さい 1. 参考 CCP Expressオーダのプション オーダ時のオプション • CCP Expressのイメージ • ルータアクセス用の設定 が入った状態で出荷可能! 参考 CCP Express Quick Setup Wizard • Quick Setup Wizardを利用して以下の設定を行うことが可能です ホスト名 • WANインタフェース(PPPoE) • Zone Base Fire Wall • Quick Setup Wizard 参考 CCP Express 日本語サンプル CCP Express 3.1から日本語版のGUIがリリース予定です! 参考資料 • Quick Start Guide http://www.cisco.com/c/en/us/td/docs/net_mgmt/cisco_configuration_professional_express/v3_0/guides/quick_start/CiscoCPExpress_qsg.html • Release Note http://www.cisco.com/c/en/us/td/docs/net_mgmt/cisco_configuration_professional_express/v3_0/rlsnts/ccp_express_rel_notes.html • Feature Guide http://www.cisco.com/c/en/us/td/docs/net_mgmt/cisco_configuration_professional_express/v3_0/guides/featureguide/ccp_express_Feature_Guide.html
© Copyright 2024 ExpyDoc