web-dev-qa-db-ja.com

networkmanager-strongswan vpn-VPN経由の特定のIPのルーティング

Linux Mint 19.2でVPNを設定しようとしています。

network-manager-strongswanを使用しているので、[〜#〜] vpn [という名前のこのファイルを追加しました〜#〜]の下の/etc/NetworkManager/system-connections/

[connection]
id=VPN
uuid=be1d4fd1-bbaa-4aa9-9fdc-e293bf16fe67
type=vpn
autoconnect=false
permissions=
timestamp=1582680217

[vpn]
address=vpn********.it
certificate=
encap=yes
ipcomp=no
method=eap
password-flags=0
proposal=no
user=user
virtual=yes
service-type=org.freedesktop.NetworkManager.strongswan

[vpn-secrets]
password=password

[ipv4]
dns-search=
ignore-auto-dns=true
ignore-auto-routes=true
method=auto

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
ip6-privacy=0
method=ignore

接続は問題なく、プライベートネットワークでsshを使用してアクセスできます。大きな問題は、接続後にインターネットをサーフィンできなくなることです。VPNに接続すると、他のすべてのアドレスがロックされます。
私はignore-auto-routes構成内のフラグで、なぜ接続がロックされるのですか?


ip a出力*

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope Host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope Host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:3c:de:1b brd ff:ff:ff:ff:ff:ff
    inet yy.16.209.132/24 brd yy.16.209.255 scope global dynamic noprefixroute ens33
       valid_lft 1656sec preferred_lft 1656sec
    inet yy.26.199.18/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::216e:bcc0:3b4f:44b2/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

route -n出力

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         yy.16.209.2    0.0.0.0         UG    20100  0        0 ens33
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 ens33
yy.16.209.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
yy.26.199.18   0.0.0.0         255.255.255.255 UH    50     0        0 ens33
yy.26.199.18   0.0.0.0         255.255.255.255 UH    100    0        0 ens33

ip xfrmポリシー出力NO VPN

src yy.16.209.0/24 dst yy.16.209.0/24 
    dir fwd priority 175423 
src yy.16.209.0/24 dst yy.16.209.0/24 
    dir in priority 175423 
src yy.16.209.0/24 dst yy.16.209.0/24 
    dir out priority 175423 
src 169.254.0.0/16 dst 169.254.0.0/16 
    dir fwd priority 183615 
src 169.254.0.0/16 dst 169.254.0.0/16 
    dir in priority 183615 
src 169.254.0.0/16 dst 169.254.0.0/16 
    dir out priority 183615 
src fe80::/64 dst fe80::/64 
    dir fwd priority 134463 
src fe80::/64 dst fe80::/64 
    dir in priority 134463 
src fe80::/64 dst fe80::/64 
    dir out priority 134463 
src yy.26.199.18/32 dst 0.0.0.0/0 
    dir out priority 383615 
    tmpl src yy.16.209.132 dst xx.xx.124.58
        proto esp spi 0xc57cfb3f reqid 7 mode tunnel
src 0.0.0.0/0 dst yy.26.199.18/32 
    dir fwd priority 383615 
    tmpl src xx.xx.124.58 dst yy.16.209.132
        proto esp reqid 7 mode tunnel
src 0.0.0.0/0 dst yy.26.199.18/32 
    dir in priority 383615 
    tmpl src xx.xx.124.58 dst yy.16.209.132
        proto esp reqid 7 mode tunnel
src ::1/128 dst ::1/128 
    dir fwd priority 68927 
src ::1/128 dst ::1/128 
    dir in priority 68927 
src ::1/128 dst ::1/128 
    dir out priority 68927 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 
src ::/0 dst ::/0 
    socket in priority 0 
src ::/0 dst ::/0 
    socket out priority 0 
src ::/0 dst ::/0 
    socket in priority 0 
src ::/0 dst ::/0 
    socket out priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 
src ::/0 dst ::/0 
    socket in priority 0 
src ::/0 dst ::/0 
    socket out priority 0 
src ::/0 dst ::/0 
    socket in priority 0 
src ::/0 dst ::/0 
    socket out priority 0

ip xfrmポリシー出力NDER VPN

src yy.26.199.18/32 dst 0.0.0.0/0 
    dir out priority 383615 
    tmpl src yy.16.209.132 dst xx.xx.124.58
        proto esp spi 0xc787ea42 reqid 2 mode tunnel
src 0.0.0.0/0 dst yy.26.199.18/32 
    dir fwd priority 383615 
    tmpl src xx.xx.124.58 dst yy.16.209.132
        proto esp reqid 2 mode tunnel
src 0.0.0.0/0 dst yy.26.199.18/32 
    dir in priority 383615 
    tmpl src xx.xx.124.58 dst yy.16.209.132
        proto esp reqid 2 mode tunnel
src fe80::/64 dst fe80::/64 
    dir fwd priority 134463 
src fe80::/64 dst fe80::/64 
    dir in priority 134463 
src fe80::/64 dst fe80::/64 
    dir out priority 134463 
src ::1/128 dst ::1/128 
    dir fwd priority 68927 
src ::1/128 dst ::1/128 
    dir in priority 68927 
src ::1/128 dst ::1/128 
    dir out priority 68927 
src yy.16.209.0/24 dst yy.16.209.0/24 
    dir fwd priority 175423 
src yy.16.209.0/24 dst yy.16.209.0/24 
    dir in priority 175423 
src yy.16.209.0/24 dst yy.16.209.0/24 
    dir out priority 175423 
src 169.254.0.0/16 dst 169.254.0.0/16 
    dir fwd priority 183615 
src 169.254.0.0/16 dst 169.254.0.0/16 
    dir in priority 183615 
src 169.254.0.0/16 dst 169.254.0.0/16 
    dir out priority 183615 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 
src ::/0 dst ::/0 
    socket in priority 0 
src ::/0 dst ::/0 
    socket out priority 0 
src ::/0 dst ::/0 
    socket in priority 0 
src ::/0 dst ::/0 
    socket out priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 
src ::/0 dst ::/0 
    socket in priority 0 
src ::/0 dst ::/0 
    socket out priority 0 
src ::/0 dst ::/0 
    socket in priority 0 
src ::/0 dst ::/0 
    socket out priority 0

VPNが接続されているときに、この部分が追加されていることがわかる出力の差分:

src yy.26.199.18/32 dst 0.0.0.0/0 
    dir out priority 383615 
    tmpl src yy.16.209.132 dst xx.xx.124.58
        proto esp spi 0xc787ea42 reqid 2 mode tunnel
src 0.0.0.0/0 dst yy.26.199.18/32 
    dir fwd priority 383615 
    tmpl src xx.xx.124.58 dst yy.16.209.132
        proto esp reqid 2 mode tunnel
src 0.0.0.0/0 dst yy.26.199.18/32 
    dir in priority 383615 
    tmpl src xx.xx.124.58 dst yy.16.209.132
        proto esp reqid 2 mode tunnel

私はたくさんのことを試しましたが、運がありませんでした。

  • は、yy.26.199.18のMetricを1050および1100に増加しようとしました。
  • route del default && ip route add default via yy.26.199.18 dev ens33
  • ルートエントリyy.26.199.18を削除しようとしましたが、何も変更されませんでした

そして他の多くの愚かなもの。

そのため、VPNを介して特定のアドレスをルーティングしながら、「通常のインターネット」に自分の接続を使用したいと思います。
可能です?

4

charon-nmの現在の状態では、トンネルのもう一方の端にリモートネットワークを定義するための「設定」はありません。 VPNクライアントはデフォルトで完全なアドレス空間を提案し、VPNレスポンダに依存して、トラフィックセレクタをより特定のリモートサブネットに絞り込みます。これは Charon-nmコード で確認できます。また、NetworkManagerプラグインの Strongswan wiki にも記載されています。

ご覧のとおり、トンネルにはサブネット構成がありません。サーバー管理にサブネットを選択させます。クライアントは常にリモートネットワークに0.0.0.0/0を提案し、サーバーはそれを構成済みのサブネットに絞り込みます。

したがって、レスポンダがそれを絞り込んでいない場合、ホストを出るすべてのユニキャストトラフィックはトンネルに送られます。

ただし、VPNレスポンダが仮想IPを割り当てる場合は、これからのルーティング方法があります。これは、charon-nmによって外部インターフェースに接続されます。これは、virtual=yes設定によって要求されます。与えられたデータから、それはあなたの外部インターフェースの2番目のアドレスです。

Strongswanはデフォルトで、ルーティングテーブルID 220および優先度220のルーティングポリシールールを使用して、そのテーブルを呼び出します。このテーブルは実際には、VPN宛てのパケットのソースをユーザーの仮想IPに設定し、xfrmポリシールールによってキャッチされます。したがって、(以前の実行と同様に)優先度の低いルールでこれらのルールをバイパスし、xfrmポリシーとの一致を回避できます。

たとえば、192.168.0.1/16へのトラフィックのみがトンネルに入るようにする場合:

ip rule add from all to 192.168.0.1/16 table 220 priority 218
ip rule add table main priority 219

最初のルールは「必要な」トラフィックをキャプチャし、Strongswanテーブルに送信します。2番目のルールは、Strongswanテーブルをメインテーブルにスキップします(テーブルを指定しない場合は、ここでルートを追加します)。

または、単一の否定的なルールで:

ip rule add not from all to 192.168.0.1/16 table main priority 128

/etc/NetworkManager/dispatcher.d/および./pre-up.d/内の./pre-down.d/のネットワークフックを使用して、そのようなルールの追加と削除を自動化できます。実行可能スクリプトを「root」が所有するモード0755でそこに配置するだけです。 $2には、それぞれvpn-pre-upまたはvpn-pre-downが含まれます。 $1には、外部インターフェイスの名前が含まれます。 $CONNECTION_FILENAMEはパス/etc/NetworkManager/system-connections/yourfilenameになります。

例えば:

#!/bin/bash
if [[ "$2" == "vpn-pre-up" ]]
then
  ip rule ...
fi

特定のアドレスへのルートがテーブル220から来ていないかどうかを確認するには

ip route get address/32

VPNを通過しない場合は表220を参照し、そうでない場合は表示する必要があります。また、VPNルートは仮想IPをsrcとして示し、「メイン」テーブルは通常の外部IPをsrcとして示します。

表220にルールを示します。

ip route show table 220

VPNまたはルーティングテーブルの設定を繰り返し変更する場合、キャッシュされたルートをフラッシュすると便利です。

ip route flush cache

また、VPNを起動すると、VPNを経由する必要がある「プレーンテキスト」で実行されているすでに実行中のIPレイヤー通信も切断されることも知っておくとよいでしょう。ただし、ルートをバイパスする前に完全なアドレススペーストラフィック選択のVPN接続が開いた場合、これは、実行中のすべてのTCP=接続がその時点で失われることを意味します。NetworkManagerディスパッチャーが事前にフックを呼び出したとしても、アップ、テーブル220のip xfrmルールとルートは、プレアップスクリプトが呼び出された時点ですでにアップしているため、これを考慮して、起動時にテーブル220のルートバイパスを設定する必要があります。

2
Gerrit