私は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 を初めて使用する場合は、慎重に行ってください。