シナリオ:LAN上でイーサネットを介して互いに接続された2台のコンピュータがあり、そのうちの1つは他のコンピュータからのトラフィックをVPNサービスにトンネリングするゲートウェイで構成されています。すべてがうまくいくようです。トラフィックは VPN サービスを介してトンネリングされ、ゲートウェイが VPN に接続されている場合、DNS リークはありません。ただし、VPN接続を切断すると、ローカルネットワーク上の他のコンピュータを介してインターネットへの他の接続を確立できなくても、どういうわけかDNSクエリを実行できます。
これが起こらないようにするにはどうすればよいですか? DNSクエリは、VPN接続が確立されている場合にのみ許可されます。編集:(そしてVPNのDNSサーバーを介してのみ可能です。VPNを切断すると、ゲートウェイにBind9サーバーが構成されていても、DNS要求は私のISPのDNSサーバーを介して行われたと思いますが、間違っている可能性があります。)
ゲートウェイで私がしたことは次のとおりです。 ipv4転送といくつかのiptablesルールを設定しました。
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
sudo iptables -A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
また、Bind9サーバーをインストールし、DNSクエリをVPN DNSに転送するように設定しました(DNSリークがあったため)。
私の考えでは、上記の規則に従わないすべてのネットワークトラフィックを削除する必要があるようです。
例えば
sudo iptables -P FORWARD DROP
sudo iptables -P INPUT DROP
しかし、それは私への接続を完全に破壊しました。どんなアイデアがありますか?
答え1
VPN に送信されなかったすべての DNS クエリを削除します。 DNS は UDP ポート 53 または TCP ポート 53 を使用できます。
iptables -A FORWARD -i eth0 ! -o tun0 -p udp --dport 53 -j DROP
iptables -A FORWARD -i eth0 ! -o tun0 -p tcp --dport 53 -j DROP
宛先ポート 53 以外のインターフェイスから着信および発信するすべてのeth0
パケットは破棄されます。tun0
分析のためにパケットを破棄する前にパケットを記録できます。
REJECT
代わりに、DROP
顧客に回答を待ってはいけないことを知らせるために使用できます。
トラフィックをブロックするために、ポート53だけでなくすべてのパケットをドロップまたは拒否できます。