特定のインターフェイスを介したポートトラフィックのルーティング

特定のインターフェイスを介したポートトラフィックのルーティング

私はLinuxのネットワーキング全体について少し新しい人です。私はUbuntu 20.04、Linux 5.4.0-25-genericを実行しています。私は次のことをしようとしていますが、少し立ち往生しています。

bond0私のサーバーとインターネットの間のローカルインターフェースであるインターフェースがあります。また、tun1サーバー外のすべてのトラフィックを暗号化するOpenVPNクライアントもあります。

デフォルトポートbond0の代わりにポートXとポートYをルーティングしようとしています。tun1

私が試したこと:

ここでこのテーマを見ましたが、しかし、何らかの理由で動作しないようです。 IPルーティングテーブル80を作成し、ガイドが言ったすべてのことを実行しましたが、トンの代わりにボンドからトラフィックを送信することはできません。

それでも、外部IPアドレスを介してポートにアクセスできないため、機能しないことがわかります。

詳細は次のとおりです。

  • bond0:192.168.50.34
  • ルーター:192.168.50.1
  • tun1:10.44.10.6

関連があるかもしれませんが、私はそれを通してOpenVPNサーバーも運営しており、それtun0を通して転送も少し設定しておきましたが、関係はないようです。

誰もがこのポートルーティングを機能させるために私に別のものを与えることができればいいでしょう!

修正する

iptables -t mangle -nvL

Chain PREROUTING (policy ACCEPT 14576 packets, 2179K bytes)
 pkts bytes target     prot opt in     out     source               destination
14668 2198K CONNMARK   all  --  *      *       0.0.0.0/0            0.0.0.0/0            CONNMARK restore

Chain INPUT (policy ACCEPT 14576 packets, 2179K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 14840 packets, 8224K bytes)
 pkts bytes target     prot opt in     out     source               destination
14874 8228K markports  all  --  *      *       0.0.0.0/0            0.0.0.0/0            mark match 0x0
14863 8227K CONNMARK   all  --  *      *       0.0.0.0/0            0.0.0.0/0            CONNMARK save

Chain POSTROUTING (policy ACCEPT 14883 packets, 8227K bytes)
 pkts bytes target     prot opt in     out     source               destination

 Chain markports (1 references)
 pkts bytes target     prot opt in     out     source               destination
 104K   19M MARK       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:32400 MARK set 0x80
    0     0 MARK       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:1195 MARK set 0x80
    5   469 MARK       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 MARK set 0x80
   90 11706 MARK       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443 MARK set 0x80

IP ルーティング表示テーブル 80

default via 192.168.50.1 dev bond0
192.168.50.0/24 dev bond0 scope link src 192.168.50.34

IPルール

0:      from all lookup local
32765:  from all fwmark 0x80 lookup 80
32766:  from all lookup main
32767:  from all lookup default

セカンドアップデート

上記のハイパーリンクテキストでは、最終的にパケットをローカルインターフェイスに転送します。サーバーからクライアントに何も送信できませんが、次のいずれかのコマンドにバグがあるようです。

iptables -t mangle -I OUTPUT 1 -m mark --mark 0 -j markports

コマンドを次のように変更するとき:

iptables -t mangle -I OUTPUT 1 -m mark --mark 0x80 -j markports

パケットをサーバーにストリーミングできます。それでもインターネットを介してサーバーにアクセスできませんが、今は他の問題かもしれません。今後数日以内にtcpdumpを見てみましょう。

ベストアンサー1

私がそうしたように コメントOPリンクからLinuxカーネル4.17から始めて、以下を使用します。iptables(または何もWebフィルタこれ以上関連しません)を使用してこの問題を解決してください。この問題を処理するために使用できる最新のカーネルで説明されている新機能kernelnewbies.org:

sport、dport、およびip protoマッチングを含むように拡張されたfibルールマッチングのサポート(5タプルマッチングサポートの完了)データセンターのポリシーベースルーティングの一般的なユースケースには、5タプルマッチングが必要です。犯罪犯罪犯罪犯罪犯罪

したがって、以前の回答とは異なる詳細を検索するのではなく、この回答で新しいアプローチを実装します。

私はただ仮定する一つVPN が実行中です。 OPで説明されているVPN。他のVPNと対話するかどうかを知るための情報が不足しています。

何でも傷つけてくださいIPルールルールまたはiptables以前に追加されたルールは、この問題を解決する試みでした。

OPが示すように、表80を維持する。

ip route add table 80 192.168.50.0/24 dev bond0 src 192.168.50.34
ip route add table 80 default via 192.168.50.1

次に追加ip rule特定の宛先ポートを使用するときに代替パスを選択するルール。ユースケースや残りのトポロジを知りません(他のVPN、サーバー)。返品VPNからの着信トラフィックを受信して​​います...)、セキュリティ上の理由からサーバー自体に制限し、サーバーがルーティングできるものは何も許可しませんでした。これが以下の目標ですiif lo。特別な表現方式です。地元でつまり、ローカルで開始された発信(ルーティングされていない)トラフィックです。

ip rule add iif lo ipproto tcp dport 80 lookup 80
ip rule add iif lo ipproto tcp dport 443 lookup 80
ip rule add iif lo ipproto tcp dport 1195 lookup 80
ip rule add iif lo ipproto tcp dport 32400 lookup 80

それでは残りは休みましょう。厳格なリバースパスの転送到着緩いRPF(これはまったく活性化していないものと大きく変わりません。)ポジティブデフォルトでは、特定のLinuxディストリビューションから戻りトラフィックが破棄されるのを防ぐには、次の手順を実行します。

sysctl -w net.ipv4.conf.bond0.rp_filter=2

それだけです:

# ip route get 192.0.2.10
192.0.2.10 dev tun1 src 10.44.10.6 uid 0 
    cache 
# ip route get 192.0.2.10 ipproto tcp dport 80
192.0.2.10 via 192.168.50.1 dev bond0 table 80 src 192.168.50.34 uid 0 
    cache

おすすめ記事