私は、TAP (TUN ではなく) デバイスを使用して自宅のネットワークに OpenVPN サーバーをセットアップしており、リモートでネットワークに接続するクライアントは、(有線の) 自宅のネットワークと同じサブネットにブリッジされます。
しかし、私は自宅でイーサネットを使ってドッキングするラップトップを持っており、他の場所ではWiFiを使用しています(自宅ではWiFiを使わないようにしています。混雑したマンハッタンのアパートではひどい状況です)。また、ネットワーク上のすべてのデバイスに固定IPアドレスを設定するのが好きなので、イーサネットアダプターのIP構成を固定し、VPNに接続するときにTAPデバイスにも同じIPを使用します(クライアント構成ディレクトリサーバー側で)。
ラップトップの OpenVPN サービスを設定して、イーサネット接続がアクティブでない場合にのみ OpenVPN に接続するようにする、ハッキングの少ない優れた方法はありますか? OpenVPN サービスがバックグラウンドで自動的に実行されるのは非常に便利で、イーサネットに接続するたびに手動でオフにする必要はありませんが、すでに使用している同じ IP アドレスを使用して、VPN 経由ですでに物理的に接続している同じネットワークに接続しようとするのは明らかに良い考えではありません...
init スクリプトを使って何かを作ることはできると思いますが、Ubuntu の公式設定からの逸脱をできるだけ最小限に抑えたいと思っています。より「適切な」アプローチを誰かが思いついてくれたら本当にありがたいです。
答え1
いろいろ試してみた結果、たまたま私の構成に適した解決策を見つけました。これは完全に一般的な解決策ではないので、誰かがもっと堅牢な解決策を提示してくれることを期待しています。
sudo ufw allow ...
イーサネット接続時にラップトップで OpenVPN を無効にする代わりに、ネットワークの OpenVPN サーバーで ufw (Uncomplicated Firewall) を構成して、ローカル サブネットからの接続を拒否するようにしました。ただし、と を使用してルールを作成するだけよりも少し複雑ですsudo ufw deny ...
。
まず、VPN をローカル ネットワークにブリッジするマシンで ufw を実行している場合 (私もそうしています)、デフォルトではトラフィックがドロップされるため、転送トラフィックを許可するように ufw を構成する必要があります。つまり、を
DEFAULT_FORWARD_POLICY="DROP"
に変更します。DEFAULT_FORWARD_POLICY="ACCEPT"
/etc/default/ufw
次に、ルールを正しい順序で追加する必要があります。ufw はルールを 1 つずつ処理し、その順序でルールを作成した場合のみ、サブネット内で OpenVPN (ポート 1149) への接続を拒否するルールを、外部からの接続を許可する前に使用します。私の場合、これは、 を実行する前に
sudo ufw delete deny from 192.168.16.0/20 to any port 1194
(これはタイプミスではなく、実際にはローカルで /20 サブネットを使用しています :D) を実行することを意味しましたsudo ufw allow 1194
。最後にローカルネットワークからの接続が実際にするこれらはローカル ネットワークから送信されたように見えるため、ufw ルールが呼び出されます。
最後の部分は重要です。なぜなら、最初の 2 つの手順を試したときにはそうではなかったからです。私のラップトップの OpenVPN はmydomainname.com
、 の VPN に接続するように自動的にセットアップされます。VPN は自宅のルーターに動的に割り当てられ、次に自宅のルーターは、 で VPN を実行しているコンピューターにポート 1194 を転送します192.168.16.1
。すべてのルーターに当てはまるとは限りませんが、少なくとも私のルーターの場合、mydomainname.com
ローカル サブネット内から に接続すると、ラップトップではなくルーターの IP アドレスを持つように見える OpenVPN サーバーへの接続が作成されます。(長い話になりますが、実際には、ルーターに接続された別のサブネット上の他のデバイスからの VPN アクセスを許可したいのです。自宅のセットアップはかなり複雑です :D)。
mydomainname.com
私の場合の解決策は、ルーターの DNS サーバーをからへの静的割り当てで構成し192.168.16.1
、 がmydomainname.com
直接 に解決されるようにすることでした192.168.16.1
。そうでない場合は、ルーターの外部 IP に解決されます。私の場合はこれでうまくいきましたが、結果は異なる可能性があります。