|||||||||||||||||||||

なんぶ電子

- 更新: 

Debianルーターのトラブル

今回のネットワーク図

筆者はDebianでIPsec通信環境を構築しインターネットの先にあるクラウドサーバーとの通信を暗号化させています。ルーターではなくDebianルーターを使っているのは、後から必要になったネットワークだったからなのですが、ルーターへの負荷の軽減にもなるかなと考えています。

また、IPSecのトンネルモードの利点を生かし、クラウドサーバーの内側にプライベートアドレスを設けて、そのアドレスを使って通信しています。

クラウドサーバーの内側あてのパケットは、もともとのルーターのルーティングによって、IPSecを受け持つDebianPCに転送されるように設定したのですが、少しおかしな現象が起きました。

4オクテット目が254が従来からあるゲートウェイルーター、252がDebianです。

ネットワークに詳しい人からしてみれば、当たり前なのかもしれないのですが、同じネットワークにあるほかのPCからPingをクラウドサーバーのアドレス(192.168.201.1)に送信すると次のようなメッセージが出ます。

nanbu$ping 192.168.201.1
PING 192.168.201.1 (192.168.201.1) 56(84) bytes of data.
From 192.168.1.254: icmp_seq=1 Redirect Host(New nexthop: 192.168.1.252)
From 192.168.1.252: icmp_seq=1 Redirect Host(New nexthop: 192.168.1.254)
64 bytes from 192.168.201.1: icmp_seq=1 ttl=63 time=50.0 ms
From 192.168.1.254: icmp_seq=2 Redirect Host(New nexthop: 192.168.1.252)
From 192.168.1.252: icmp_seq=2 Redirect Host(New nexthop: 192.168.1.254)
64 bytes from 192.168.201.1: icmp_seq=2 ttl=63 time=40.7 ms
From 192.168.1.254: icmp_seq=3 Redirect Host(New nexthop: 192.168.1.252)
From 192.168.1.252: icmp_seq=3 Redirect Host(New nexthop: 192.168.1.254)
64 bytes from 192.168.201.1: icmp_seq=3 ttl=63 time=36.1 ms

Pingを送信したPCのデフォルトゲートウェイになっている、4オクテット目が254となっているルーターが、ICMPリダイレクトで252のDebianルーターを案内するところまでは問題ないです。しかし、そのあとDebianルーターからもICMPリダイレクトメッセージを送っています。その宛先が254です。これではICMPリダイレクトの意味がありません。

Debianルーター(252)でルーティングを確認してみます。

nanbuDebian$ ip route get 192.168.201.1
192.168.201.1 via 192.168.1.254 dev enp2s0 table 220 src 192.168.1.252 uid 1000
cache
nanbuDebian$ip route show table 220
172.16.201.0/24 via 172.16.1.254 dev enp2s0 proto static src 172.16.1.252

特に問題はなさそうです。tableが220番になっているのは、IPsec通信を担うstrongSwanが自動で作成する経路だからです。

ip route add 192.168.201.1 via 192.168.1.254 dev enp2s0 src 192.168.1.252

このviaの部分から判断してICMPリダイレクトを送信しているのではないかと思われます。

暫定策として、DebianルーターからICMPリダイレクトを送信しないようにします。ICMPリダイレクトを送信しないようにするには次のコマンドを入力します。

nanbuDebian# sysctl -w net.ipv4.conf.all.send_redirects=0

これで試してみると、

nanbu$ping 192.168.201.1
PING 192.168.201.1 (192.168.201.1) 56(84) bytes of data.
From 192.168.1.254: icmp_seq=1 Redirect Host(New nexthop: 192.168.1.252)
From 192.168.1.252: icmp_seq=1 Redirect Host(New nexthop: 192.168.1.254)
64 bytes from 192.168.201.1: icmp_seq=1 ttl=63 time=50.0 ms
From 192.168.1.254: icmp_seq=2 Redirect Host(New nexthop: 192.168.1.252)
From 192.168.1.252: icmp_seq=2 Redirect Host(New nexthop: 192.168.1.254)
64 bytes from 192.168.201.1: icmp_seq=2 ttl=63 time=40.7 ms
From 192.168.1.254: icmp_seq=3 Redirect Host(New nexthop: 192.168.1.252)
From 192.168.1.252: icmp_seq=3 Redirect Host(New nexthop: 192.168.1.254)
64 bytes from 192.168.201.1: icmp_seq=3 ttl=63 time=36.1 ms

あれ? 解決しません。

原因がよくわからないので、いったんファイアウォールで止めてみます。筆者はiptable-persistentを使っているので、/etc/iptables/rules.v4に記述します。そうでない場合はiptablesコマンドに続けて次の記述を入力してください。

...
-A OUTPUT -p icmp --icmp-type redirect -j DROP 
...

余談ですが、--icmp-typeに指定できる項目を確認するには、「iptables -p icmp -h」とすると出てきます。

これで再びテストをしてみます。

nanbu$ping 192.168.201.1
PING 192.168.201.1 (192.168.201.1) 56(84) bytes of data.
From 192.168.1.254: icmp_seq=1 Redirect Host(New nexthop: 192.168.1.252)
64 bytes from 192.168.201.1: icmp_seq=1 ttl=63 time=51.5 ms
64 bytes from 192.168.201.1: icmp_seq=2 ttl=63 time=73.7 ms
64 bytes from 192.168.201.1: icmp_seq=3 ttl=63 time=53.6 ms

一応解決できましたが、いわば対症療法なので気持ちが悪いです。ネットを検索したらDebianではないですが次のような文章がありました。

「net.ipv4.conf.all.send_redirects オプションまたは net.ipv4.conf.interface.send_redirects オプションのいずれかまたは両方を有効に設定すると、ICMP リダイレクトの送信が有効のままになります。」

これに従って、設定を入力してみます。

nanbuDebian# sysctl -w net.ipv4.conf.all.send_redirects = 0
nanbuDebian# sysctl -w net.ipv4.conf.<インターフェース名>.send_redirects = 0

すると、うまくいきました。

最後に、sysctl.confに記述して設定を永続化します。さらにsysctl -pで設定を読み込みエラーとならないか確認します。

筆者紹介


自分の写真
がーふぁ、とか、ふぃんてっく、とか世の中すっかりハイテクになってしまいました。プログラムのコーディングに触れることもある筆者ですが、自分の作業は硯と筆で文字をかいているみたいな古臭いものだと思っています。 今やこんな風にブログを書くことすらAIにとって代わられそうなほど技術は進んでいます。 生活やビジネスでPCを活用しようとするとき、そんな第一線の技術と比べてしまうとやる気が失せてしまいがちですが、おいしいお惣菜をネットで注文できる時代でも、手作りの味はすたれていません。 提示されたもの(アプリ)に自分を合わせるのでなく、自分の活動にあったアプリを作る。それがPC活用の基本なんじゃなかと思います。 そんな意見に同調していただける方向けにLinuxのDebianOSをはじめとした基本無料のアプリの使い方を紹介できたらなと考えています。

広告