Linux - VPN 動的 IP ドメイン以外のすべての接続をブロックします

Linux - VPN 動的 IP ドメイン以外のすべての接続をブロックします

私はIPではなくドメイン名で接続するVPN(OpenVPN)を持っています。VPNのIPは動的で、いつでも変更される可能性があります。私のマシンのインターネットとの唯一の通信はmy.vpn.domain.com何もないそれ以外。

私はルックアップとして OpenDNS ルックアップを使用しますmy.vpn.domain.comが、これは十分に安全だと考えています (VPN ドメインに属していないすべての IP/接続もブロックすると仮定)。また、これより優れた、または他の IP レイヤー ベースのオプションは見当たりません。

私の目的は、実際に優れた(漏洩や手動介入のない)VPN キルスイッチを実現することです。

ドメイン経由で VPN に接続したら、制限を解除して、ファイアウォール/iptables で tun0 経由の接続のみを許可するようにすることができますmy.vpn.domain.com。その後、VPN 接続が切断された場合は、tun0 経由のみで再度開始しmy.vpn.domain.com、次に VPN 接続、次にすべての tun0 を許可する、というように行います。

これは hosts ファイル経由で実行できますか、それとも他の方法で実行できますか? 私は Linux スクリプトの初心者です。

答え1

次のようなことを試してみてはいかがでしょうか:

非トンネルインターフェース上のすべてのDNSクエリをドロップするようにiptablesを設定しますが、my.vpn.domainは許可します。

iptables -A INPUT -o eth0 -p udp -s $your_dns_server --sport 53 -m state --state ESTABLISHED     -j ACCEPT
iptables -A INPUT -o eth0 -p udp --dport 53 -j DENY

iptables -A OUTPUT -o eth0 -p udp --dport 53 -m string --string my.vpn.domain --algo bm -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp -d $your_dns_server --dport 53 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp --dport 53 -j DROP

確立したらすべてのトラフィックをトンネルに送信するようにopenvpnを設定します。

OpenVpn はデフォルトではすべてのトラフィックをトンネルにルーティングしませんが、 でそうするように設定できますredirect-gateway。「すべてのクライアント トラフィック (Web トラフィックを含む) を VPN 経由でルーティングする」セクションをお読みください。ここ

自動的に再接続するようにopenvpnを設定する

ping-restart と keepalive の設定値を試してみてください。

ping 10
ping-restart 120
push "ping 10"
push "ping-restart 60"

or equivalently:

keepalive 10 60

必要に応じて調整してください。ただし、理想的には、iptables 設定と openvpn keepalive 設定を入力すると、マシンは my.vpn.domain のクエリ、openvpn 接続の確立と再確立、および利用可能な場合にのみその接続のルーティングのみを実行できるはずです。

まだopenvpnのドキュメントを読んでいない場合は、動的IPアドレスでOpenVPNサーバーを実行するサーバー側の設定が正しいことを確認します。

...そして、クライアント マシンがリモートの場合は、ロックアウトされないように、iptables 経由で SSH を許可してください。iptables を初めて使用する場合は、慎重に行ってください。

関連情報