サイトの存在を隠しつつも、sftpサーバを公開し、後輩と1G以上のファイルのやりとりしたい。
パブリック側のIPアドレスを教えてしまうと、どこのサーバだろうかとブラウザで開いたりするとサイトの存在がわかってしまう。
このサーバをホストしているConoHaではIPアドレス1個0.5円/時間(350円/月)で、短期間なら安く済むので、IPアドレスを追加し、そのIPアドレスでsftpサーバを公開しようと思う。
ここでは、新NICを1枚追加し、それに新しいIPアドレスを割り当てる。
(NIC2枚構成、1枚には既存のIPアドレス、もう1枚には新しいIPアドレスを割り当てる。)
デフォルトゲートウェイは既存のNIC側なので、外部から新IPアドレスにアクセスがあると
その応答はデフォルトゲートウェイから送信されるので、正常に通信できない。
(送信元から見ると応答がないように見える。)
一方で、ポリシールーティングという技術があり、特定のIPアドレスやポート等を条件にして、ルーティングを制御することができる。
ここでは、ポリシールーティングを使って、既存NICから送信する場合は既存NICのゲートウェイを、新NICから送信する場合は新NICのゲートウェイを使うようにポリシーを作成してルーティングを制御する。
前提
環境
- CentOS7を使用する。
- これまではifconfigやnetstat等を提供するnet-toolsを使用していたが、CentOS7からはipコマンド等のiproute2が標準になっているので、それを使用する。
- CentOS7の元になるrhel7のネタだが、ポリシールーティングの設定方法は次の内容を参考にした。rule-eth*でルーティングの条件を定義、そこで使うルート情報をroute-eth*で定義する。
How to make routing rules persistent, when I want packets to leave the same interface they came in? - CentOS7から、ネットワークの管理機能は、NetworkManagerデーモンが担うとのこと。上記のrule-eth*を実行するためには、NetworkManagerのdispatcher機能を有効にする必要がある。
RHEL7: ネットワークガイド: 1.3. NETWORKMANAGER について
Is it possible to set up Policy Based Routing with NetworkManager in RHEL 7? - (参考)NetworkManagerは従来のifcfg タイプの設定ファイルもサポートするそうだが、この辺の設定ファイルを実行できるようにするためには、dispatcher機能を有効にする必要がある。ドキュメントの記載はないが、次のファイルで前述のrule-eth0/eth1を実行している。 /etc/NetworkManager/dispatcher.d/10-ifcfg-rh-routes.sh
手順
次の環境で設定する前提で手順を説明する。
新NICの設定は、nmtui等で設定済みとする。
- 既存NIC(eth0)
IPアドレス: 1.1.1.10/24、ゲートウェイ: 1.1.1.254 - 新NIC(eth1)
IPアドレス: 2.2.2.20/24、ゲートウェイ: 2.2.2.254
NetworkManagerのdispatcherの有効化
# yum -y install NetworkManager-config-routing-rules ... # systemctl enable NetworkManager-dispatcher.service # systemctl start NetworkManager-dispatcher.service
ルートの定義
main_gw, sub_gwというルートを追加する。
# cd /etc/iproute2/ # cat rt_tables # # reserved values # 255 local 254 main 253 default 0 unspec # # local # #1 inr.ruhep 201 main_gw 202 sub_gw
NIC毎の設定
ポリシールーティングのルールやルートを定義する。
定義内容の意味はrhel7のマニュアルを参考にした。
RHEL7: ネットワークガイド: 2.2. ネットワーク設定ファイルの編集
# cd /etc/sysconfig/network-scripts/ # cat route-eth0 default via 1.1.1.254 table main_gw # cat rule-eth0 from 1.1.1.10 table main_gw # cat route-eth1 default via 2.2.2.254 table sub_gw # cat rule-eth1 from 2.2.2.20 table sub_gw # systemctl restart network.service
設定内容が反映されたかを確認する。
# ip route show default via 1.1.1.254 dev eth0 proto dhcp metric 100 default via 2.2.2.254 dev eth1 proto static metric 101 1.1.1.0/24 dev eth0 proto kernel scope link src 1.1.1.10 metric 100 2.2.2.0/24 dev eth1 proto kernel scope link src 2.2.2.20 metric 101 # ip rule show 0: from all lookup local 32764: from 2.2.2.20 lookup sub_gw 32765: from 1.1.1.10 lookup main_gw 32766: from all lookup main 32767: from all lookup default
ちなみに、NetworkManagerのdispatcherが有効になっていないと、ip rule showの表示内容に反映されない。また、次のエラーが表示される。
# cat /var/log/messages|grep NetworkManager … ... NetworkManager[xxx]: <warn> [xxx] ifcfg-rh: 'rule-' file is present; you will need to use a dispatcher script to apply these routes …
[…] ルダウンロードのみに限定したsftpを公開したい。 このサーバの存在も隠蔽するために、以前の記事で、新しいIPアドレスを追加した。 この新しく追加したIPアドレスで、sftpを公開する。 […]