EVE-NGで外部へのアクセスを行うには
2020年12月6日
EVE-NGでは仮想ラボ環境からEVENGをインストールしているホストのIF経由して外部環境へアクセスすることが可能です。例えば物理サーバにEVE-NGをインストールしている場合、外部のネットワークや機器と物理NIC経由で接続することが可能です。VM環境であれば、EVE-NGをインストールしたVMと仮想スイッチ経由で接続することができます。
これによって、仮想ラボ機ラボ外の物理や仮想アプライアンスと連携したり、インターネットにアクセスしてSaaSの連携や、Linuxであればパッケージの更新なども行うことが可能です。
これらの方法は公式Cookbook ”EVE Clouds and Networks"に記載されていますので、このドキュメントの情報をもとに外部アクセスへの方法をご紹介したいと思います。なおホスト環境(物理、VM、クラウド)によって外部アクセスする際の注意点もことなってきますので、これらについてもご紹介したいと思います。
仮想ラボ環境から外部環境へのアクセス
EVE-NGのラボから外部へアクセスするには、基本的にネットワークオブジェクト「Cloud」を利用します。
ネットワークオブジェクトは、以下のように「bridge」と「Cloud」の2種類あります。
「bridge」は、スイッチの形をしたオブジェクトで、ラボに配置し仮想ノードを繋げば、仮想ノード間をL2接続してくれます。bridgeオブジェクトの実態はそのままlinux bridgeです。
「Cloud」は、雲の形をしたオブジェクトで、「bridge」と同様にCloudオブジェクトを配置し仮想ノードを接続すると、仮想ノード間にL2接続を提供します。実態もlinux bridgeとなります。
「Cloud」と「bridge」と異なる点は、「Cloud」にはそれぞれのIDに該当するホスト上のインタフェース(eth)が、bridge IFとして接続されている点です。
つまり、インタフェースが外部接続されている環境であれば、「Cloud」に仮想ノードを接続することで、仮想ノードと外部環境を接続することができます。
図にすると、以下のようなイメージとなります。
例えば、物理マネージメントネットワークに仮想ノードを接続したい場合、以下の図のように、Cloud0を配置し仮想ノードを接続すればOKです(eth0の先にマネジメントネットワークがある前提です)。
さて、EVE-NGで外部アクセスするには「Cloud」オブジェクトを使うことが基本となるのですが、ホスト環境によっては、外部アクセスする際に少し癖があるものもあります。この点について触れておきたいと思います。
ESXi環境の場合
ESXi環境の場合、インスタンスの接続先はESXiのvSwitchになります。
注意すべき点としては、vSwitchの設定変更が必要であることです。vSwitchの設定画面からPromiscuous mode -> Accept、と設定する必要があります。
Promiscuous mode が Rejectとなっている場合には、仮想ノードと通信できないようですのでご注意ください。
GCP環境の場合
GCP環境の場合、インスタンスの接続先はGCPの内部ネットワークになりますが、この内部ネットワークには注意しないといけません。なぜなら単純なL2/L3環境ではなさそうだからです。例えばGCPのマネジメントネットワークに仮想ノードを接続させようと、仮想ノードをCloud0に接続しても、GCPの内部ネットワークからはアドレスは払い出されないようです。
そもそもインスタンスに払い出されるIPアドレスは/32と特殊であり、これは内部のSDNの仕様なんだろうと推測します。GCPインスタンス上でEVE-NGを使うと外部との接続はできないのか。。なんとかしたい(この時はLinuxサーバのapt upgradeしたかったです)。外部接続今回はこの辺の仕様を追うよりも、他の方法で外部アクセスできないか検討してみました。それが以下の2つのNAT形式による対応です。
プロフェッショナル版 – Nat Cloud
まず有料のプロフェッショナル版のほうにはNat Cloudという機能があり、こちらを使うことで外部アクセスできるようです(私は使ってないので動作未確認です)。なるほど、NATを使えばGCPでも外部と通信できるかもしれませんね。
各エディションの機能: https://www.eve-ng.net/features/compare
自家製 – NAT Cloud スクリプト
NATで外部アクセスできるかもしれないと、ということがわかりましたので、頑張って「簡単なNATスクリプト」を作成してみました。スクリプトは以下の通りです。
sudo -s
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o pnet0 -j MASQUERADE
iptables -A FORWARD -i pnet0 -o pnet9 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i pnet9 -o pnet0 -j ACCEPT
ip addr add 192.168.1.1/24 dev pnet9
dnsmasq --dhcp-range=192.168.1.10,192.168.1.30,12h
インスタンスにスクリプトを流し込んだ後、ネットワークオブジェクトのCloud9(pnet9)にノードを接続すれば、DHCPサーバ(dnsmasq)から192.168.1.x/24 でアドレスが払い出され、Cloud0(pnet0)のNAT経由でインターネットや他インスタンスへのアクセスが可能という想定です。以下の図のようなイメージとなります。
実際に外部ネットワークへアクセスできるか試したところ、意外に一発で動作してくれました。以下の通り仮想ラボのネットワークからPublic DNSに通信できることを確認しています。
あとは “/etc/rc.local" などにスクリプトを書き込んでおくと、EVE-NGを起動時に、自動でNAT Cloudが起動するようになります。少なくともバージョン(v2.0.3-95)では動作しています。もし動かないようなことがあればコメントでお知らせいただけると幸いです。
関連記事
EVE-NGとは – VM環境でお手軽インストール
最近、EVE-NGというネットワークエミュレータがネットワーク関係者の間でも徐々 ...
EVE-NGにエミュレーション対象のイメージを追加して動かしてみよう
EVE-NGでは様々なネットワークベンダーの製品やクライアント、サーバを仮想ノー ...
EVE-NGで限界までオーバコミット検証。オプションのCPU Limit、UKSMって?
皆さんはネットワークエミュレータを動作させる時、ホスト側のスペックはどのように検 ...
パブリッククラウド(GCP)でEVE-NGを使う
EVE-NGはパブリッククラウドとしてGCP上のインスタンスへインストールして利 ...