web-dev-qa-db-ja.com

すべての着信トラフィックをバイパスせずにOpenVPNクライアントのポートをバイパス/除外するにはどうすればよいですか?

私は この答え を前もって読んだ、それは言う:

ip rule add from x.x.x.x table 100
ip route add table 100 to y.y.y.y/y dev ethX
ip route add table 100 default via z.z.z.z

問題は、 これはすべてのポートに適用されます 、そしてiptablesを使用して特定の接続をドロップすることができますが、それは私が望んでいることではありません。

OpenVPNに...

  • SSH、TeamViewerなどの一部のポートを除外します。
  • 他のすべてのポートをトンネリングします。ドロップしません。

クライアントはMacMiniです。必要に応じてサーバー構成を変更できます。

1
Austin Huang

これは、iptablesマングルを使用して実現できます。ルーティングテーブルは問題ありません。特定のトラフィックを除外/含めるためにいくつかのルールを追加する必要があります。

あなたの場合、SSHの場合は次のようになります。

ip rule add fwmark 2 table 100
ip route flush cache
iptables -t mangle -A OUTPUT -p tcp --dport 22 -j MARK --set-mark 2
iptables -t nat -A POSTROUTING -o ethX -j SNAT --to-source z.z.z.z
                                  ^                        ^
                               your public interface      your public IP

この意志:

  1. fwmark2をルーティングテーブル100に設定します
  2. 干渉を避けるためにルーティングキャッシュをフラッシュします
  3. 宛先ポート22(SSH)へのすべてのパケットにマーク2を設定します
  4. EthXからパブリックIPに送信されるすべてのパケットをSNATします

これらすべてが必要なのか、それとも方向転換する必要があるのか​​はわかりませんが、どちらの見方をするかによって異なります(all xxxを除くOpenVPN経由のトラフィック、またはno xxxを除くOpenVPN経由のトラフィック)。

例えば。ルーティングテーブルを使用する必要はありませんが、この方法の方がはるかにクリーンであるか、SNAT /マスカレードなどは必要ありません。

1
Lenniey