zaki work log

作業ログやら生活ログやらなんやら

2nicなCentOS7にIPマスカレード処理させてルーターにする(firewalld)

良い感じのタイトルにならないやつ

構成

f:id:zaki-hmkc:20200122215528p:plain

よくある話だと思うけど、2つのnicを持っているLinuxマシンに対して、internal segment側のマシンのゲートウェイとして動作させる、というやつ。
実は大昔に一度構築したけど、その時のメモがないので再構築したというお話。

図中internal segmentのマシンから、public segmentおよびインターネットへアクセスできるようにする設定を行います。

2nic持ってる対象のLinuxは、CentOS 7.5 1804 minimalでセットアップしてあります。

概要

  • ルーターLinux

    • ens224(172.16.0.0/23)からのパケットをens192(192.168.0.0/24)へ流す
    • DNSも自身で稼働して172.16.0.0/23からの問い合わせに応答・または上位へ問い合わせ
    • nic毎の設定は以下の通り

      項目 nic1 nic2
      addr 192.168.0.20/24 172.16.1.1/23
      dns 192.168.0.11 (上位DNS) 127.0.0.1
      gateway 192.168.0.1 (上位へのネットワーク) なし
  • internal segmentのマシン

設定

firewalld

以下のコマンドをぶち込めばだいたいOKです。

firewall-cmd --permanent --zone=internal --change-interface=ens224
firewall-cmd --permanent --zone=internal --add-masquerade

firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -o ens192 -j MASQUERADE
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i ens224 -o ens192 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i ens192 -o ens224 -m state --state RELATED,ESTABLISHED -j ACCEPT

firewall-cmd --reload

firewall-cmd --zone=internal --change-interface=ens224で、ens224のネットワークをinternalという名前を付けて管理します。

ちなみに昔からよく見かける/proc/sys/net/ipv4/ip_forward1にする手順は、--add-masqueradeの手順で行われるので実は不要。

念のためOSをリブートしても設定が保持されることを確認しておくとbetter。

これで、internal segmentのマシンから、public segmentへのsshやhttpアクセスが可能になるはず。

DNS設定は何もしていないので、この時点ではIPアドレスでのアクセスのみ。

DNS

ルーターLinuxDNSサーバーをお手軽に立てるためにdnsmasqをインストール。

# yum install dnsmasq

最小限の設定
※ 設定本体は/etc/dnsmasq.confだけど、/etc/dnsmasq.d/*.confを外部ファイル読み込みしてくれるので、そっちに定義

# cat /etc/dnsmasq.d/local-dns.conf
domain-needed
bogus-priv

起動と有効化

# systemctl enable dnsmasq
# systemctl start dnsmasq

firewalldの除外設定

# firewall-cmd --add-service=dns --permanent --zone=internal
# firewall-cmd --reload

これでinternal networkのマシンは、172.16.1.1に構築したDNSサーバーで名前解決しつつ、public networkへ接続可能になる。

yum install rubyなどで確認。


参考

qiita.com

qiita.com


cacooさんのフリープランで作成可能な図の上限超えてしまったので、draw.io初めて使ってみました。


ESXiで追加のネットワークを作成して放置してたやつ

zaki-hmkc.hatenablog.com


firewalld確認コマンド

firewall-cmd --get-active-zones
firewall-cmd --list-all --zone=internal
firewall-cmd --direct --get-all-rules