<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Client on nyanmo main blog</title>
    <link>https://www.nyanmo.info/tags/client/</link>
    <description>Recent content in Client on nyanmo main blog</description>
    <generator>Hugo</generator>
    <language>ja</language>
    <lastBuildDate>Sun, 10 May 2026 14:44:15 +0900</lastBuildDate>
    <atom:link href="https://www.nyanmo.info/tags/client/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Linux 環境のおけるルーティング設定での &#34;via&#34; というキーワードの解釈 (iproute2)</title>
      <link>https://www.nyanmo.info/posts/linux/viakeywordoniproute2asdefaultgateway/</link>
      <pubDate>Sun, 10 May 2026 14:44:15 +0900</pubDate>
      <guid>https://www.nyanmo.info/posts/linux/viakeywordoniproute2asdefaultgateway/</guid>
      <description>&lt;h2 id=&#34;この記事を作った動機&#34;&gt;この記事を作った動機&lt;/h2&gt;
&lt;p&gt;　Linux 環境において、VPN 環境についてトラブルシュートしていたところ、設定ミスが発生した。その原因として、&lt;code&gt;via&lt;/code&gt;という単語を正しく解釈できておらず、VPN クライアントの設定ミスでパケットをクライアント内のネットワークでループさせていたということがあった。今回の記事では、そのことについて軽くまとめたい。&lt;/p&gt;
&lt;h2 id=&#34;説明&#34;&gt;説明&lt;/h2&gt;
&lt;h3 id=&#34;簡易的な解釈&#34;&gt;簡易的な解釈&lt;/h3&gt;
&lt;p&gt;　iproute2 における &lt;code&gt;via&lt;/code&gt; というキーワードは、ゲートウェイ設定(静的ルーティング、Next Hop)を表す。&lt;code&gt;ルーティングされる対象のネットワーク via ゲートウェイ&lt;/code&gt; のような書き方になる。ゲートウェイとして、クライアント自身を設定してしまうとローカルでループしてパケットが期待どうりにネットワークに排出されない通信障害になる。&lt;/p&gt;
&lt;p&gt;　例えば、クライアントが VPN 接続先以外のネットワークから VPN 接続をすることを想定する。VPN クライアントは仮想インターフェース(vpn_vps)に、192.168.30.100/24 を持っていると仮定し、VPN サーバの仮想ハブが 192.168.30.2 をL3仮想スイッチルーティング用に持っている場合を想定する。この場合、192.168.30.0/24 のネットワークを経由して、192.168.0.0/24 にパケットを送りたい場合は、192.168.30.2 をゲートウェイを設定する。192.168.30.100/24 などクライアント自身を指定すると、通信がローカルでループし、VPN クライアントはそもそもパケットを外部のネットワークに排出せず、通信障害になる。&lt;/p&gt;
&lt;p&gt;　一見すると &lt;code&gt;192.168.0.0/24 via [VPNクライアント自身のIP]&lt;/code&gt; とかくと、VPNクライアント自身のIPを経由して外部に 192.168.0.0/24 宛てのパケットをルーティングするという解釈もできそうだが、少なくとも Linux 環境の iproute2 の設定においては、その解釈は間違っていそうである。あくまで &lt;code&gt;via&lt;/code&gt; というキーワードが示しているのは、次にパケットをどのコンピュータに送るべきか、外部のルーティングが可能なコンピュータの IP を指定するという意味合いなようである。クライアント自身を設定してしまうと、クライアント自身にルーティングしてしまうようである。&lt;/p&gt;
&lt;p&gt;　また、Linux 環境の iproute2 における設定では、明確に外部のゲートウェイとなる PC の IP を指定しなくても、パケットを送り出したいインターフェースだけ指定するという、曖昧な設定もできるようである。&lt;code&gt;192.168.0.0/24 dev vpn_vps&lt;/code&gt; のようにして、192.168.0.0/24 宛てのパケットを、vpn_vps という NIC からとにかく送り出すという設定はできるようである。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# いろんな書き方の例 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# VPNクライアントとして接続されているルータPCにルーティングする仮想L3スイッチのIPを 192.168.30.2/24 として仮定している&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ip route add 192.168.0.0/24 via 192.168.30.2 dev vpn_vps
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ip route add 192.168.0.0/24 dev vpn_vps
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ip route add defalt via 192.168.30.2 dev vpn_vps
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;前提とするネットワーク構成図に関する説明&#34;&gt;前提とするネットワーク構成図に関する説明&lt;/h3&gt;
&lt;h4 id=&#34;単語の説明&#34;&gt;単語の説明&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Home Network&lt;br&gt;
　自宅のネットワークなど私的に運用される LAN&lt;/li&gt;
&lt;li&gt;Foreign Network&lt;br&gt;
　大学や仕事場所、コンビニやファミレスなどにある公共の場所にある LAN&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;各ネットワークに関する説明&#34;&gt;各ネットワークに関する説明&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;192.168.0.0/24&lt;br&gt;
　家庭用ルータではなく、主に nftables によって転送が管理されていて、カーネルで転送許可をしてある Linux ルータPCで管理されている自宅のネットワーク&lt;/li&gt;
&lt;li&gt;192.168.30.0/24&lt;br&gt;
　固定 IP を持った VPS 上で動いている SoftEther VPN Server (DHCP サーバが有効) における仮想ハブのネットワーク&lt;/li&gt;
&lt;li&gt;192.168.x.0/24&lt;br&gt;
　大学や仕事場所、コンビニやファミレスなどにある公共の場所のネットワーク&lt;/li&gt;
&lt;li&gt;192.168.0.1/24 192.168.30.2/24 192.168.x.1/24&lt;br&gt;
　各ネットワークにおけるデフォルトゲートウェイ や DHCP、場合によっては DNS サーバーなど一通りのルーティングなどのネットワークに必要な機能を備えた装置の IP やルーティングを行う仮想L3スイッチの IP&lt;/li&gt;
&lt;li&gt;192.168.30.13/24&lt;br&gt;
　SoftEther VPN Server を動かしている VPS がクライアントとして仮想ハブのネットワークに参加しているときの IP&lt;/li&gt;
&lt;li&gt;192.168.30.100/24&lt;br&gt;
　Foreign Network から VPN 接続して仮想ハブに参加している VPN クライアントの仮想 NIC における IP&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;nic-名の説明&#34;&gt;NIC 名の説明&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;vpn_vps&lt;br&gt;
　Foreign Network から VPS 上にある VPN の仮想ハブにアクセスする際に、VPN クライアントが使う仮想インターフェース名&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;その他説明&#34;&gt;その他説明&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;ルータPC&lt;br&gt;
　Home Network で使われている、家庭用ルータの代わりに、スイッチとセットで nftables で転送や NAT を構成し、ip-hole や kea で DNS や DHCP サーバとしても機能するようにした Linux PC のこと。VPS 上で動いている VPN サーバのネットワークにもクライアントとして参加し、192.168.30.0/24 と 192.168.0.0/24 の間を転送する。異なるネットワーク間を転送する際、ARPプロキシ(L2ルーティング)は有効にしていない。&lt;/li&gt;
&lt;li&gt;VPN サーバー&lt;br&gt;
　今回登場する VPN サーバーは直接 Home Network からは動作せず、VPS 上に専用に用意したものである。192.168.30.0/24 のネットワークを接続した VPN クライアントに提供する。仮想 L3 スイッチの設定により、192.168.0.0/24 宛てへのパケットを、192.168.30.0/24 に接続していてネットワークの越境が可能な転送設定をしてある VPN クライアントであるルータPCに仕向けるように設定してある。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;説明の図&#34;&gt;説明の図&lt;/h4&gt;
&lt;figure class=&#34;align-center &#34;&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;https://www.nyanmo.info/posts/linux/viaKeywordOnIproute2asDefaultGateway/NetworkConfigurationExplain.png#center&#34;
         alt=&#34;ネットワーク構成図の説明&#34;/&gt; 
&lt;/figure&gt;

&lt;h3 id=&#34;各ルーティング状況に関する説明&#34;&gt;各ルーティング状況に関する説明&lt;/h3&gt;
&lt;h4 id=&#34;パケットがクライアント内部でループするイメージ&#34;&gt;パケットがクライアント内部でループするイメージ&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&#34;align-center &#34;&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;https://www.nyanmo.info/posts/linux/viaKeywordOnIproute2asDefaultGateway/loop.png#center&#34;
         alt=&#34;パケットがループする例&#34;/&gt; 
&lt;/figure&gt;

&lt;figure class=&#34;align-center &#34;&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;https://www.nyanmo.info/posts/linux/viaKeywordOnIproute2asDefaultGateway/loop1.png#center&#34;
         alt=&#34;パケットがループする例1&#34;/&gt; 
&lt;/figure&gt;

　上記の図のような状況において、トラブルシュートでは以下のような厄介な挙動が見受けられた。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
