デフォルトでは、VPNと残りのAPを介してルーティング

デフォルトでは、VPNと残りのAPを介してルーティング

私はEthernetインターフェイス(eth0)を持つOrangepi(armbian)を持っていますが、ここにAccessPoint用のインターフェイス(wlan0)を設定し、VPNクライアント(tun0)をインストールしました。目標は次のとおりです。 wlan0 APのすべてのトラフィックはVPN(tun0)に転送され、その逆も同様です。システムプロセス、プログラムなどのすべてのトラフィックは、デフォルトで192.168.1.1 ISP宛先にルーティングされます。

                     -------------------
                     |                 |
       10.8.3.2/24---|tun0       wlan0 |----192.168.2.1/24
   192.168.1.31/24---|eth0             |    WIFI AP
                     |                 |
                     -------------------

転送を有効にしました:net.ipv4.ip_forward=1

そしてiptablesにルールを追加してください:iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

結果:APを介したアクセスはうまく機能し、VPNを介したルーティングは常にうまく機能します。

問題:すべてのトラフィックはVPNを介してルーティングされます。プロセスによって生成されたトラフィックは、デフォルトの192.168.1.1を介してルーティングされます。

端末でping、ルートトラッキングなどを実行すると、tun0がルーティングされ、ton0の10.8.3.2をソースIPに割り当てる理由がわかります。それが問題のようです。 eth0の192.168.1.31を割り当てると、デフォルトの192.168をルーティングします。 。 1.1が修正されました。

VPNクライアントの作成デフォルト:

  0.0.0.0         10.8.3.1        128.0.0.0       UG        0 0          0 tun0

削除してもすべてがそのまま残ります。

デフォルトでは、残りのトラフィックを 192.168.1.1 ISP 宛先にルーティングするには、何を設定する必要がありますか?

Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.8.3.1        128.0.0.0       UG        0 0          0 tun0
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 eth0
10.8.3.0        0.0.0.0         255.255.255.0   U         0 0          0 tun0
128.0.0.0       10.8.3.1        128.0.0.0       UG        0 0          0 tun0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 wlan0
178.239.165.30  192.168.1.1     255.255.255.255 UGH       0 0          0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.2.0     0.0.0.0         255.255.255.0   U         0 0          0 wlan0

eth0: flags=4163 <UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.31  netmask 255.255.255.0  broadcast 192.168.1.255
ether 02:81:91:07:0c:a5  txqueuelen 1000  (Ethernet)

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
inet 127.0.0.1  netmask 255.0.0.0
inet6 ::1  prefixlen 128  scopeid 0x10<host>

tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
inet 10.8.3.2  netmask 255.255.255.0  destination 10.8.3.2
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 500  (UNSPEC)

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 192.168.2.1  netmask 255.255.255.0  broadcast 192.168.2.255
ether 00:e0:4c:81:79:8a  txqueuelen 1000  (Ethernet)

ベストアンサー1

注:Linuxでは廃止され、廃止されたLinuxカーネルAPIを使用しているため、Linuxでは使用しないifconfigでください。 、および(だけでなくfrom)routeに置き換える必要があります。ip linkip addrip routeIP ルート 2母音曲)。

ポリシーベースのルーティングこれは、Linuxで廃止されたコマンドを使用して達成することはできません。IP ルート 2ファミリー命令。


現在のルーティング設定では、デフォルトルートではなく2つの「半基本」ルートを使用して元のデフォルトルートを上書きしますdef1サーバープッシュルーティングまたはクライアントはそれを上書きします。)、実際のVPNパスは次のとおりです。

  0.0.0.0         10.8.3.1        128.0.0.0       UG        0 0          0 tun0
  128.0.0.0       10.8.3.1        128.0.0.0       UG        0 0          0 tun0

そして、デフォルトルートよりも狭いので、すべての宛先のデフォルトルートを上書きします(トンネルエンベロープへのルーティングループを避けるために明示的に追加されたVPNリモートエンドポイントなどの他のルートエントリを除く)。

したがって、最初のエントリを削除するだけでもインターネットの約半分に影響を与えます(たとえば、www.armbian.com5.161.66.254と確認するとトンネルを介して接続できなくなりますが、www.debian.org128.31.0.62と確認すると到達します)。もちろん、両方を削除すると、トンネルはある程度無効になります。これらの操作はホストに影響を与えます。そして後続ノード無線LAN 0

ここで、ポリシーベースのルーティングを使用すると、ルーティング/配信されたトラフィックとホスト自体からのトラフィックを区別して、異なるルーティング結果を得ることができます。

OPの目的は、ホストの背後(LANの背後)のノードにVPNを使用させることです。無線LAN 0)ホスト自体ではありません。現在の設定に他の変更を適用する必要はありません。これはポリシールーティングルールを使用して手動で実行できます。 +現在適用されているパステーブルの上書き:CIDR 0(0.0.0.0/0)または1(0.0)を無視するホストにのみ適用されます。 .0.0 /1 および 128.0 .0.0/1: OpenVPN定義1方法)を選択し、新しいデフォルトパスを再割り当てします(これが元のデフォルトパスになります)。

この問題を解決するには、次の3つのコマンドで十分です。:

ip route add default via 192.168.1.1 dev eth0 table 1000
ip rule add pref 1000 iif lo lookup main suppress_prefixlength 1
ip rule add pref 1001 iif lo lookup 1000

これは次のことを行います。

  • ホスト自体でのみ機能します(ホストが開始したトラフィックの特殊な構文)、ルーティング/配信されたトラフィックでは機能しません(どこから来るかに応じて一致またはiif lo異なる)。デフォルトのルーティングテーブルは、パスがそうでないときはいつでもパスを取得するために使用されます。デフォルトパスまたは2つから来ます。iif wlan0iif eth0iif tun0定義1「半基本」パスです。ありがとうございます。suppress_prefixlengthサプレッサー。

  • それでもホスト自体に対してのみ機能します。ルートが見つからない場合は、ルーティングテーブル1000に重複した元のデフォルトルートが使用されます。

    したがって、デフォルトでは、ホストはVPNを使用せずにインターネットにアクセスできます。

さらに:

  • ルーティング/転送されたトラフィックはこの設定の影響を受けません。

    したがって、VPNを介したインターネット接続は以前と同様に続行されます。

  • ホスト自体に返されるトラフィックは、常に最初に次に処理されます。地元のしたがって、ルーティングテーブルはこの設定の影響を受けません。実際、デフォルト設定 0 の最初のルーティング ルールは次の処理を行います。地元のルーティングテーブルは以下の通りです。

    # ip rule
    0:      from all lookup local
    1000:   from all iif lo lookup main suppress_prefixlength 1
    1001:   from all iif lo lookup 1000
    32766:  from all lookup main
    32767:  from all lookup default
    
  • ホストは通常​​どおりVPNを使用して10.8.3.0/24のノードに到達するか、ワイヤレスで192.168.2.0/24のノードに到達できます。なぜなら、ホストのパスにはCIDRが1よりも良い24があるからです。抑制。

注:インターフェースイーサネット0管理上削除された(そして再び上がった)ルーティングテーブル1000のエントリは削除されるので、次のように入れ直す必要があります。基本ルーティングテーブル:これは次に統合する必要があります。イーサネット0起動時に設定するのではなく、インターフェイス設定を実行します。


もちろん、ゲートウェイについて明示的な知識を必要としない場合や、これを自動的に実行する他の方法もありますが、VPN設定が必要な場合があります。これらのコマンドは、VPNツール(変数としてゲートウェイを提供することができます)を介してスクリプトとして実行でき、VPN構成を介してこの問題に対する直接的なソリューションを提供することもできます。私は存在する情報を知る方法がありません。

おすすめ記事