プライベート サブネットを持つ、ローカル専用の追加のイーサネット インターフェイスを備えたコンピューターがあります。StrongSwan VPN が確立されると、そのサブネットにアクセスできなくなります。
これはローカルの「左」構成です(アルゴ):
conn ikev2-<rightip>
fragmentation=yes
rekey=no
dpdaction=clear
keyexchange=ikev2
compress=no
dpddelay=35s
ike=aes128gcm16-prfsha512-ecp256!
esp=aes128gcm16-ecp256!
right=<rightip>
rightid=<rightip>
rightsubnet=0.0.0.0/0
rightauth=pubkey
leftsourceip=%config
leftauth=pubkey
leftcert=daves.crt
leftfirewall=yes
left=%defaultroute
auto=add
問題のサブネットは 10.0.0.0/24 です。%defaultroute は 192.168.0.0/24 のアドレスに解決されます。
「left」と「leftsubnet」は、この場合の適切なオプションではないようですが、これより良い方法は見つかりません。leftsubnet を 10.0.0.0/24 と !10.0.0.0/24 に設定してみました。
StronSwan VPN 接続からローカル サブネットを除外するにはどうすればよいですか?
接続のルート構成を検査するにはどうすればよいですか?
答え1
設定できるのはパススルーポリシー。
更新: @ecdsaが指摘したように、strongswan >= 5.5.2ではより簡単な方法お使いのバージョンで使用できるかどうかは、最後を確認してください。
いくつかのランダム IP を使用した例。変更とトンネルを行う前:
# ip route get 10.0.0.55
10.0.0.55 dev lxcbr0 src 10.0.0.77 uid 0
トンネルを確立した後、問題:
# ip route get 10.0.0.55
10.0.0.55 via 192.168.0.1 dev eth0 table 220 src 192.168.0.44 uid 0
この構成を以下に追加します/etc/ipsec.conf
:
conn ignorelan
left=127.0.0.1 #prevents usage in peers selection algorithm
leftsubnet=10.0.0.0/24
rightsubnet=10.0.0.0/24
authby=never
type=passthrough
auto=route
そしてそれをリロードします:
# ipsec reload
すぐに有効になるはずです。有効にならなかった場合は(今回は)、次の操作を実行できます。
# ipsec route ignorelan
'ignorelan' shunt PASS policy installed
いずれにしても、これは後で再起動するときに使用する必要があります。これで、(トンネルに加えて) 次のものが得られます。
# ipsec status
Shunted Connections:
ignorelan: 10.0.0.0/24 === 10.0.0.0/24 PASS
[...]
これで、トンネルが確立されているかどうかに関係なく、正しいルートが返されます (strongswan によって処理されるため、(もはや) テーブル main ではなく、テーブル 220 で処理されます)。
# ip route get 10.0.0.55
10.0.0.55 dev lxcbr0 table 220 src 10.0.0.77 uid 0
cache
0.0.0.0/0 のトンネルが稼働している場合、表 220 に次のような結果が表示されます。
# ip route show table 220
default via 192.168.0.1 dev eth0 proto static src 192.168.0.44
10.0.0.0/24 dev lxcbr0 proto static src 10.0.0.77
192.168.0.0/24 dev eth0 proto static src 192.168.0.44
パススルー設定に実際のルート (例: 間違ったネットマスク) を入力しないと、「シャント」に対して間違った結果 (予想されるソース IP など、間違ったネットワーク カードを通過する) が発生する可能性があるため、注意してください。
アップデート: のバイパスLANプラグイン特に動的な環境では、使いやすくなります。
新しいエントリを追加する代わりにconn
、それを有効化します(例えば、Debian buster(安定版ではない)では、/etc/strongswan.d/charon/bypass-lan.confを編集し、load=yes(つまり、charon.plugins.bypass-lan.load=yes)を設定します)。デフォルトでは、すべてのインターフェースがシャントされます。つまり、トンネルは確立されますが、デフォルトでは使用されません。したがって、どちらか一方を適宜設定してinterfaces_ignore
くださいinterfaces_use
。interfaces_ignore
欲しくないinterfaces_use
トンネルをバイパスするか、または、欲しいトンネルを迂回します。例:
interface_use = lxcbr0
この例ではipsec start
、前の方法と同様に、 の後に が取得されます。
# ip route show table 220
10.0.0.0/24 dev lxcbr0 proto static src 10.0.0.77
(ただし、IPv6 が使用されている場合は、このインターフェースに関連する IPv6 ルートも考慮されます)。
さらに別の(ハック的な)方法は、strongswan のテーブル 220 をバイパスすることです。strongswan 設定の代わりに、次のコードを使用して同じことを実現できます(これらの質問と例では)。
ip rule add priority 219 to 10.0.0.0/24 lookup main
Strongswan のテーブル 220 を使用して次のエントリに進むのではなく、ターゲット ネットワークでデフォルト (メイン) ルーティング テーブルを使用します。