Linux マシンをルーターにする

2018年9月29日

はじめに

訳あって、Linux マシンをルーターにしたい。構成は以下の通りとする。

  • host1 (IP: xxx.xxx.xxx.xxx, 192.168.0.1)
  • host2 (IP: 192.168.0.2)

host1 はアドレス xxx.xxx.xxx.xxx の NIC1 でインターネットに接続できるものとする。また、host1 はアドレス 192.168.0.1 の NIC2 でプライベートネットワークに接続している。host2 はアドレス 192.168.0.2 でブライベートネットワークに接続している。このとき、host2 でインターネット接続できるようにしたい。そのために、host1 をルーターにしたい。

環境

Red Hat Enterprise Linux Sever 7.3

すべきこと

host2 のデフォルトゲートウェイを host1 に設定すれば、host2 から外部に ping したときにパケットは host1 を通って外部に出て行けるのだが、外部のルーターは host1 のアドレスは知っているが host2 のアドレスは知らないので、パケットを host2 に返すことができない。だったら host2 のアドレスを host1 のアドレスに偽装してやればよい。この仕組みが NAT であり、host1 でローカルネットワークのアドレスを外部用アドレスに変換する設定をしてやればよい。

host1 の設定

フォワーディングの設定

フォワーディングの設定を確認する。

# sysctl -a | grep net.ipv4.ip_forward

出力が 1 でなければ、以下のように設定する。

/etc/sysctl.conf

net.ipv4.ip_forward=1

設定を有効にする。

# sysctl -p

NAT の設定 (iptables)

状況: iptables は入っているが、iptables-service は入っていない。firewalld は起動していない。

iptables により NAT の設定を行う。iptables-service をインストール。

# yum install iptables-service

設定確認。

# iptables -t nat -nvL

設定。

# iptables -t nat -A POSTROUTING -o eno1 -s 192.168.0.0/24 -j MASQUERADE

外部接続のインターフェイスを eno1 とする。192.168.0.0 を外部接続用アドレスに変換する。

設定を間違った場合の削除は、以下のようにする。まず、番号を確認する。

# iptables -t nat -nL --line-numbers

番号を指定して削除。

# iptables -t nat -D POSTROUTING 番号

設定が済んだら、設定を保存する。

# iptables-save > /etc/sysconfig/iptables

設定を有効化する。

# systemctl enable iptables
# systemctl start iptables

host2 の設定

デフォルトゲートウェイのアドレスを host1 のローカルネットワークアドレスに設定する。DNS サーバーは host1 が使っているものを設定する。