Linuxをインターネットへのゲートウェイにする


背景

ESXi上で稼働しているVMをインターネットに接続したい
だが接続したいVMが稼働しているESXiとは異なるESXiにWi-Fiルータが接続されている
せっかくなのでWi-Fiルータが接続されているESXiにて稼働しているVMをルータ化して、他のVMはそいつをゲートウェイにしてインターネットに接続できるようにしてみる

インターネットに接続したいVM : VM2
Wi-Fiルータが接続されているESXiにて稼働しているVM : VM1

※前提としてVM1がすでにインターネット接続できている状態とする

環境

VM OS : RHEL7
ESXi Version : 6.5U1
Wi-Fiルータ : どっかのUQWiMaxモバイルルータにクレードルをぶっ刺したやつ

いざ実践

以下のような流れで行う

1.VM1にてフォワーディング有効化設定
2.VM1にてNAT設定
3.VM2にてGatewayの変更

[1] VM1にてフォワーディング有効化設定

カーネルの設定をいじくる
デフォルトでip_forwardは無効になっている


 # cat /proc/sys/net/ipv4/ip_forward
 0

これを有効化する


 # echo 1 > /proc/sys/net/ipv4/ip_forward
 # cat /proc/sys/net/ipv4/ip_forward
 1

これだけだと再起動したときに再び無効化されてしまうため、恒久的に有効化されるように/etc/sysctl.confに以下のエントリーを追加する。

net.ipv4.ip_forward = 1

[2] VM1にてNAT設定

このままだとVM2からインターネットへの通信はできるが、インターネットからVM2への帰りの通信ができない。
なぜならWi-FiルータがNW2(10.0.0.0/24)の経路を知らないため
Wi-Fiルータにスタティックルートを登録することができればよいのだが、今回それはできない

そのためVM1にてNATができるように設定する必要がある
LinuxでNATをさせるにはiptables/firewalldを使用するのが手っ取り早い
RHEL7/CentOS7ではデフォルトでfirewalldが動作しており、firewallの設定でごにょごにょやれればよいがfirewallの設定に慣れていないため、今回はiptablesの関連パッケージをインストールしてiptablesでNATを実現させる

まずはfirewalldを停止させておく

 # systemctl stop firewalld
 # systemctl disable firewalld

次にiptables関連パッケージをインストールする

# yum install -y iptables-devel iptables-services

iptabelsを起動する

 # systemctl start iptables
 # systemctl enable iptables 

NATを設定する

 # iptables -t nat -A POSTROUTING -o ethXXX -j MASQUERADE 

※ethXXXはNW1側のインターフェール名

[3]VM2にてGatewayの変更

VM2のデフォルトゲートウェイをVM1のNW2のIFのIPアドレスにする

これでVM2がインターネットに抜けられるようになる!