答えを探していましたが、何も見つかりませんでした。
ほとんどのスマートなインターネットユーザーのように、私もVPNを使用しています。私が間違っている場合は修正できますが、VPNを設定するとき(少なくともOpenVPNプロトコルを使用)、ネットワークルーティングは次のようになります。
app 1 -----
|
app 2 -----+ ----- tun0 -----> outside world
|
app 3------+
その後、VPNがオフになっている場合:
app 1 -----
|
app 2 -----+ -----------> outside world [No protection :(]
|
app 3------+
その他 源泉tun0
VPN IPアドレスからのトラフィックを許可するように設定します。ただし、ほとんどの場合、IPアドレスは不明またはランダムに選択されます(つまり、ユーザーがランダムに選択)。
これについて数時間を費やした後に私が経験している問題は、それがうまくいくことができるということです(tun0がどこにでも行くことを許可します)。ただtun0がすでに有効になっている場合ただこの接続セッション中。接続を終了すると、ルールは許可されません。どのトラフィックが通過し、VPNに接続することもできません。
奇妙なことに、Androidではこれはとても簡単です。私がしなければならなかったのは、AFWall +(私のお気に入りのVPN)をインストールし、VPNへのネットワーク接続を許可してから、私が望むアプリのVPN接続のみを許可することでした。他のすべてのユーザーはブロックされ、VPN がダウンしてもトラフィックは許可されません。PCではなぜそんなに難しいのですか?
長すぎます。すべて/一部のトラフィックが tun0 に移動できるようにし、トラフィックが tun0 からどこにでも移動できるようにする ufw ルールはありますか?
ベストアンサー1
私はそれを次のように扱います。XYの問題:あなたの目標(X)は、特定のアプリケーションにVPNを使用させ、VPNが失敗した場合にインターネット接続を停止することです。あなた考えるこれにはファイアウォールルールとキルスイッチを使用する必要がありますが、より簡単な解決策があります。ネットワークネームスペース。
したがって、新しいネットワーク名前空間にインターフェイスを作成するようにOpenVPNを設定しますtun
(例:この問題)。次に、この名前空間内のVPNを介してのみインターネットにアクセスする必要があるすべてのアプリケーションを起動します(使用方法についてはip netns exec
上記のリンクを参照)。 VPNが失敗すると、アプリケーションはインターネットにアクセスできなくなります。価格が上がったら、もう一度訪問できます。
ボーナスにより、デフォルトのネームスペースで実行されているすべてのアプリケーションは、VPNなしでインターネットに直接アクセスできます(したがって接続速度が速くなります)。
ファイアウォールルールを使用してこれを行うのはより複雑です。確かにVPNに関連付けられているすべてのIPアドレスがわかった後にのみファイアウォールルールを設定できます。ファイアウォールはIPに基づいて動作するため、この問題を解決する方法はありません。
AFWall+が実際に何をしているのかわかりません(知っていましたか?)。おそらく、内部的には名前空間を使用しています。