SB C&Sの最新技術情報 発信サイト

C&S ENGINEER VOICE

SB C&S

【Stay Home 特集】 テレワーク中のNWエンジニアのための検証環境を作る その1

ネットワーク
2020.05.15

例外なく、わが社でもテレワークが始まって1ヶ月ほど立ちました。 もちろん、Web会議やコラボレーションツールなどで業務は滞りなくできますが、業務上物理的なネットワークデバイスが手元にないと検証ができないという私のようなネットワークエンジニアも多いのではないでしょうか。

インターネット環境での検証がしたい

在宅ワークが推奨されることで、問い合わせが増えてきているのが、リモートアクセスだったりSD-WANだったりと、明らかにインターネットの境界部分におけるアクセス方法の増強です。 こういった検証は、平常時だと、会社のインターネット回線を使って、実際に物理的なネットワーク装置やサーバーを使って検証することが多いです。 しかし、在宅ワークになってしまうと、会社においているネットワーク装置や回線、サーバーなどを使うことができないので、代替案を考える必要があります。

疑似的なインターネット環境を作る

日頃からAWSやAzureのような環境を多用している方なら在宅ワークも問題ないと思います。 しかし、出社禁止や自粛が進んでいるので、今からなるべく簡単に疑似的なインターネット環境を作っていきたいと思います。 ちょうどわが社のラボにはVMware ESXiの環境があったので、そちらをもとに疑似的なインターネット環境を用意していこうと思います。

仮想アプライアンスを集める(ファイアウォール)

検証用に無償で利用できる仮想アプライアンスはいくつかあります。 コロナウィルスのパンデミックが始まって、各メーカーから評価期間が延長されていたりするので、メーカーサイトからもぜひチェックしてみてください。

インターネットで探してみましたが、ほかにもたくさんあると思います。

Sophos XG Firewall

CheckPoint Next Generation Firewall

Fortinet FortiGate

Juniper vSRX

PPPoEサーバー用のルーターを入手

日本はフレッツの普及のおかげで、インターネット接続においてはPPPoE接続環境が多いです。そのため検証するにあたっては、なるべく現場に近い感覚で行いたいのでPPPoE環境で実施したいと思います。 最近だと、IPoEだったり、IPv6を使った環境も増えてきていますが、まずはPPPoEでの環境を再現してみましょう。

作り方はいくつかありますが、今回はオープンソースのルーターで有名な"VyOS"を使って実装していきます。

VyOSの入手はこちらから
https://www.vyos.io/

Rolling releaseをクリック
Download Rolling Releaseをクリック コメント 2020-04-24 164503.png

vyos-roling-latest.iso(約410MB)をダウンロード コメント 2020-04-24 164503-1.png

VyOSのインストール

無償利用だと、OVAの入手ができないので、ダウンロードしたISOを仮想マシンとしてインストールします。

今回私が展開した環境は、VMware ESXi 6.7上で検証環境を作成しています。
入手したVyOSを以下のような形でインストールしました。

  • 互換性: ESXi 6.0仮想マシン
  • ゲストOSファミリ: Linux
  • ゲストOSのバージョン: Debian GNU/Linux8 (64bit)
  • CPU: 1個
  • メモリ: 2GB
  • ハードディスク: 4GB
  • NIC: 3ポート(それぞれ異なるポートグループへ展開)

仮想マシンの設定作成が終わったら、起動しましょう。 久しぶりにVyOSをインストールすることになりましたが、なんかかっこいいですね。 コメント 2020-04-24 164503-2.png

起動すると、vyos login:のプロンプトが出てくるので、ユーザー名: vyos パスワード: vyos でログインしましょう。 ログインすると、vyos@vyos:~$という感じになったと思います。

VyOSをストレージへインストールする

実は今までの過程でインストールしている、VyOSはLiveCDの起動となっていて、設定を行って、それをSaveしても、再起動すると設定がなくなってしまいます。 VyOSをストレージへインストールしましょう。

vyos@vyos:~$ install image

このコマンドを入力することで、VyOSのインストールウィザードが実行されます。 あとは、ウィザードに従ってVyOSのインストールを行ってください。


vyos@vyos:~$ install image   
Welcome to the VyOS install program.  This script
will walk you through the process of installing the
VyOS image to a local hard drive.  
Would you like to continue? (Yes/No) [Yes]: [return]  
Probing drives: OK  
Looking for pre-existing RAID groups...none found.  
The VyOS image will require a minimum 1000MB root.  
Would you like me to try to partition a drive automatically
or would you rather partition it manually with parted?  
Ifyou have already setup your partitions, you may skip this step


ほとんど"エンター"で進められますが、 This will destroy all data on /dev/sda. Continue? (Yes/No) [No]: と聞かれるので、Yesと答えましょう。


最後にvyosのパスワードが聞かれるので、任意のパスワードを設定します。


詳細はこちらを見てみましょう。 VyOSユーザーガイド

インストールが終わったら、マウントしているISOイメージを切断し、VyOSを再起動しましょう。 コメント 2020-04-24 164503-3.png


vyos@vyos:~$ reboot  
Are you sure you want to reboot this system? [y/N] y

VyOSが起動すると、ストレージにインストールされた状態で利用可能です。

私の仮想環境の状態

私が使っている仮想環境は、ESXiの環境の中に、さらにESXiを作ってそこでこの疑似インターネット環境を作成しています。 現在在宅ワークということもあり、シェアしている仮想環境で何か問題あった場合に、トラブル対応もできないことから、なるべくメンバーへの影響を与えないように、完全に切り離した環境で行っています。

イメージ ちょっとわかりにくいかもしれませんが、VyOSをUTMのWAN側の接続として使います。 vSwitchは2つ用意して、vmnicとつながっていないvSwitchを用意し、そこに用意した仮想アプライアンスや仮想マシンをぶら下げることにしました。

コメント 2020-04-24 181017.png

外部からのアクセスはESXiへ接続して、Webコンソールへアクセスするか、VyOSへのSSHを接続を許可して、SSHプロキシでアクセスしようと思います。

さて大まかな構想ができたので、PPPoEサーバーを作り上げていきます。

VyOSのコンフィグレーション

VyOSの設定はインターネットで探すとたくさん出てきますが、非常に効率よく設定できるのと、意外とVyOSをフォークしたルータなども多いので覚えておくと便利かもしれません。 Juniper社のJUNOSやUbiquiti社のEdgeRouterやUnifiシリーズもこの類です。

インターフェースの設定からSSHアクセスするまで

とりあえず、VyOSのWAN側を作るという感じで、eth0(VM Network)とつながったVyOSのWAN側のインターフェースのIP設定を行い、そこからSSHでアクセスできるようにします。


vyos@vyos:~$ configure
[edit]
vyos@vyos# set interfaces ethernet eth0 address 192.168.101.17/24
vyos@vyos# set protocol static route 0.0.0.0/0 next-hop 192.168.101.254
vyos@vyos# set service ssh
vyos@vyos# commit
vyos@vyos# save

設定では、eth0へ192.168.101.17のIPアドレスを固定で設定し、デフォルトゲートウェイ及びSSHのサービスを有効化しました。
設定が終わったら、commitを入力し設定を確定します。さらに設定を保存します。

あとはいつものPCからSSHでVyOSへログインすることができます。
いつも通り、SSHでアクセスできます。


C:\Users\XXX>ssh -l vyos 192.168.101.17
The authenticity of host '192.168.101.17 (192.168.101.17)' can't be established.
ECDSA key fingerprint is SHA256:4tl9G0o0XXXXXXXXXXXXXXXXXXXXXXXXXX.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.101.17' (ECDSA) to the list of known hosts.
Welcome to VyOS
vyos@192.168.101.17's password:
Linux vyos 4.19.116-amd64-vyos #1 SMP Sat Apr 18 12:57:29 UTC 2020 x86_64
Linux vyos 4.19.116-amd64-vyos #1 SMP Sat Apr 18 12:57:29 UTC 2020 x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
vyos@vyos:~$

VyOSに入れておきたい設定

VyOSのWAN側の設定はすでに済んでいるので、検証対象のUTMが使う疑似WANやPPPoEサーバー機能を実装していきます。

ソースNAT(マスカレード)の設定

とりあえず、eth0がVyOSのインターネットの出口なので、ここですべてのIPがソースNATされるように設定しておきます。 設定方法は以下の通りです。


set nat source rule 100 outbound-interface 'eth0'
set nat source rule 100 source address '0.0.0.0/0'
set nat source rule 100 translation address 'masquerade'

※IP範囲に関係なく、すべてのIPから来たeth0を経由する通信はマスカレードするように設定しています。

IPoE用の疑似WANのインターフェース設定

IPアドレスと、DHCPサーバーの設定を有効化します。(図で見るとvPort1の設定です)


set interfaces ethernet eth1 address '192.168.102.254/24'
set service dhcp-server shared-network-name dhcp-pool subnet 192.168.102.0/24 default-router '192.168.102.254'
set service dhcp-server shared-network-name dhcp-pool subnet 192.168.102.0/24 dns-server '1.1.1.1'
set service dhcp-server shared-network-name dhcp-pool subnet 192.168.102.0/24 dns-server '8.8.8.8'
set service dhcp-server shared-network-name dhcp-pool subnet 192.168.102.0/24 range 0 start '192.168.102.10'
set service dhcp-server shared-network-name dhcp-pool subnet 192.168.102.0/24 range 0 stop '192.168.102.20'

PPPoEサーバーの設定

IPアドレスとPPPoEサーバーの設定です。(図で見るとPPPoEの設定です)

  • PPPoEサーバーはローカルDBの"ppuser"で認証しています。
  • IPを10.100.1.1-10.100.1.10で払い出すように設定しています。
  • UTM側から見たゲートウェイは10.200.1.1がゲートウェイになります。

set interfaces ethernet eth2 address '192.168.103.254/24'
set service pppoe-server authentication local-users username ppuser password 'ppuser'
set service pppoe-server authentication mode 'local'
set service pppoe-server client-ip-pool start '10.100.1.1'
set service pppoe-server client-ip-pool stop '10.100.1.10'
set service pppoe-server interface eth2
set service pppoe-server local-ip '10.200.1.1'
set service pppoe-server name-server '1.1.1.1'

(オプション)PPPoEサーバーの設定は調整可能です。より実践的な設定を入れてもいいでしょう。


[edit service pppoe-server]
vyos@vyos# set
Possible completions:
   access-concentrator
                Access concentrator name
 > authentication
                Authentication for remote access PPPoE Server
 > client-ip-pool
                Pool of client IP addresses (must be within a /24)
 > client-ipv6-pool
                Pool of client IPv6 addresses
+> interface    interface(s) to listen on
 > limits       Limits the connection rate from a single source
   local-ip     local gateway address
   mtu          Maximum Transmission Unit (MTU) - default 1492
+  name-server  Domain Name Server (DNS) propagated to client
+> pado-delay   PADO delays
 > ppp-options  Advanced protocol options
+  service-name Service name
   session-control
                control sessions count
 > snmp         Enable SNMP
+  wins-server  Windows Internet Name Service (WINS) servers propagated to client
vyos@vyos# set ppp-options
Possible completions:
   ccp          CCP negotiation (default disabled)
   ipv4         IPv4 (IPCP) negotiation algorithm
   ipv6         IPv6 (IPCP6) negotiation algorithm
   ipv6-accept-peer-intf-id
                Accept peer interface identifier
   ipv6-intf-id Fixed or random interface identifier for IPv6
   ipv6-peer-intf-id
                Peer interface identifier for IPv6
   lcp-echo-failure
                Maximum number of Echo-Requests may be sent without valid reply
   lcp-echo-interval
                LCP echo-requests/sec
   lcp-echo-timeout
                Timeout in seconds to wait for any peer activity. If this option specified it turns on adaptive lcp echo functionality and "lcp-echo-failure" is not used.
   min-mtu      Minimum acceptable MTU (68-65535)
 > mppe         Specifies MPPE negotiation preference. (default prefer mppe)
   mru          Preferred MRU (68-65535)

PPPoEサーバーの設定が反映されない問題

PPPoEサーバーの設定を有効化したとき、以下のようなエラーが出る場合


vyos@vyos# set service pppoe-server authentication mode local
[edit]
vyos@vyos# commit
[ service pppoe-server ]
  File "/usr/libexec/vyos/conf_mode/service_pppoe-server.py", line 26
    from vyos.util import call, get_half_cpus()
                                             ^
SyntaxError: invalid syntax
[[service pppoe-server]] failed
Commit failed

VyOSが利用しているPPPoEサーバーのPython設定に問題があるようです。 /usr/libexec/vyos/conf_mode/service_pppoe-server.py 以下の方法でソースファイルを編集すれば実行できます。

26行目のfrom vyos.util import call, get_half_cpus()が変ですね。 最後の()が不要です。このカッコを削除するか、コメントアウトするとかして、修正してください。

図1.png この設定変更を実施してから、PPPoEサーバーの設定を行えば、問題なくcommitできます。 ちなみに、この不具合については、


vyos@vyos# run sho version
Version:          VyOS 1.3-rolling-202004230117
Release Train:    equuleus

で確認しています。 あと設定の適用のcommitのあとはsaveを忘れずしておきましょう。

UTM側の設定

UTMの基本設定とかは、ちょっと今回の記事では紹介しませんが作ったPPPoEサーバーとつないでみましょう。 ESXiの環境では、VyoSのeth2のポートグループと、UTMのWANのポートグループを同じものに設定します。(各ポートグループのプロミスキャスモードは有効化しておきます)

仮想マシンのvNICの設定

仮想マシンのNICの割り当てをしてください。 図2.png 図3.png

UTMのPPPoE設定

UTMの機器で、VyOSのPPPoEのポートグループに所属しているインターフェース上でPPPoEクライアントの設定を行います。 例はSophos XG Firewallです。 図4.png IPアドレスがグレーアウトしているのは、PPPoEサーバーのIPをダイナミックに取得しています。 ゲートウェイアドレスが、10.200.1.1というアドレスで正常に取得できています。

VyOSのルートの確認

VyOS側からルートを見ると、PPPoEのコネクテッドルートが見えます。


vyos@vyos:~$ sho ip route connected
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
       F - PBR, f - OpenFabric,
       > - selected route, * - FIB route, q - queued route, r - rejected route
C>* 10.100.1.1/32 is directly connected, ppp0, 2d19h59m
C>* 192.168.101.0/24 is directly connected, eth0, 2d20h21m
C>* 192.168.102.0/24 is directly connected, eth1, 2d20h21m
C>* 192.168.103.0/24 is directly connected, eth2, 2d20h21m

こうなると、疑似インターネットを使った検証ができるはずです。 最近のUTMはSD-WANの設定(WANの冗長化機能)、アプリケーション単位でルートの振り分け検証や、WANの接続障害の切り替えテストができそうです。


図5.png

まとめ

いかがでしょうか。ネットワークエンジニアにとって、物理的な機器がない場合でも、とりあえず疑似的なインターネットと検証したい機器の仮想アプライアンスがあればゲートウェイ周りの機能検証はできると思います。 日頃物理環境で展開しているようなものでも、少しずつ仮想化することで、突発的な検証や理屈ではわかってるけど、細かい動作確認や手順書を作りたいといった場合に、疑似インターネット環境があると便利かと思います。



今回使ったVyOSの設定ファイル(サンプル)


vyos@vyos:~$ sho configuration commands
set interfaces ethernet eth0 address '192.168.101.16/24'
set interfaces ethernet eth1 address '192.168.102.254/24'
set interfaces ethernet eth2 address '192.168.103.254/24'
set interfaces loopback lo
set nat source rule 100 outbound-interface 'eth0'
set nat source rule 100 source address '0.0.0.0/0'
set nat source rule 100 translation address 'masquerade'
set protocols static route 0.0.0.0/0 next-hop 192.168.101.254
set service dhcp-server shared-network-name dhcp-pool subnet 192.168.102.0/24 default-router '192.168.102.254'
set service dhcp-server shared-network-name dhcp-pool subnet 192.168.102.0/24 dns-server '1.1.1.1'
set service dhcp-server shared-network-name dhcp-pool subnet 192.168.102.0/24 dns-server '8.8.8.8'
set service dhcp-server shared-network-name dhcp-pool subnet 192.168.102.0/24 range 0 start '192.168.102.10'
set service dhcp-server shared-network-name dhcp-pool subnet 192.168.102.0/24 range 0 stop '192.168.102.20'
set service pppoe-server authentication local-users username ppuser password 'ppuser'
set service pppoe-server authentication mode 'local'
set service pppoe-server client-ip-pool start '10.100.1.1'
set service pppoe-server client-ip-pool stop '10.100.1.10'
set service pppoe-server interface eth2
set service pppoe-server local-ip '10.200.1.1'
set service pppoe-server name-server '1.1.1.1'
set service ssh
set system config-management commit-revisions '100'
set system console device ttyS0 speed '115200'
set system host-name 'vyos'
set system login user vyos authentication encrypted-password ''
set system login user vyos authentication plaintext-password ''
set system ntp server 0.pool.ntp.org
set system ntp server 1.pool.ntp.org
set system ntp server 2.pool.ntp.org
set system syslog global facility all level 'info'
set system syslog global facility protocols level 'debug'

著者紹介

SB C&S株式会社
ICT事業本部 技術本部 第3技術部
宮本 世華

釣りが好きです。