.png)
よく使ったレシピがありますが、今回はDebian 11(カーネル5.10.0-10-amd64)では動作しません。
私の設定は、デフォルトでRFC1918 LAN用の内部インターフェイスeth0といくつかのISPボックスに接続されている2つの外部インターフェイスです。
ISP1のeth1は、アドレスが10.0.0.254で、パブリックIPが1.2.3.4(シンボル)のデフォルトルータとして機能します。
ISP2のeth2には、アドレスが10.0.3.254でパブリックアドレスが2.3.4.5のルーターがあります。
可能なパスが異なります。私はパケットのパスを制御したいので、いくつかのルールとfwmarkを作成しました。まず2<tab>secondrouter
追加します。/etc/iproute2/rt_tables
ip rule add fwmark 0x3 lookup secondrouter
ip route add default via 10.0.3.254 table secondrouter
ip route list table secondrouter
すべてがいいですip rule list
この時点で私は次のことができます:
curl -4 ifconfig.me
1.2.3.4 #<- public ip address of my default route
だから私はやる
iptables-legacy -t mangle -A OUTPUT -d 34.117.59.81 -j MARK --set-mark 0x3
今私がそうすれば
curl -4 ifconfig.me
<timeout>
パブリックIPで2.3.4.5を期待しています。示されたパケットがIPルーティングテーブルから経路を取得できないことは明らかであり、さらに悪いことにはタイムアウトが生じる。
以前のバージョンの Debian と同じ方法でこれを行うと、完璧に動作します。
注:私がした場合
ip route add 34.117.59.81 via <second router IP>
私のカールテストは期待どおりに完全に実行されます。
curl -4 ifconfig.me
2.3.4.5 #<- Pub ip address of my second router
iptables
ルーティングにパケットを使用または表示するときにiptables-legacy
問題が発生します。ところで、私はうまく動作する多くのiptablesルールを持っているので、iptablesの問題のようには見えません。
編集:回避策:テーブル出力に変装を追加してください。ナット
答え1
パケットがシステムを離れると、デフォルトの出力インターフェイスに対応する送信元 IP アドレスが割り当てられます。
したがって、マーキングルールはパケットに計画されている宛先以外の宛先を提供するため、出力インターフェイスにMASQUERADEルールを追加する必要があります。
iptables-legacy -t nat -A POSTROUTING -o eth2 -j MASQUERADE
netfilter の処理順序を理解するには:プルーフ)
(input interface)
|
v
/-------+-------\
| sanity checks |
\-------+-------/
|
v hook NF_IP_PRE_ROUTING
+------+------+
| conntrack |
| defrag. |
+-------------+
| mangle |
| PREROUTING |
+-------------+
| nat (dst) |
| PREROUTING |
+------+------+
|
v
local delivery /----+----\ forward
+---------------+ route +---------------+
| \---------/ |
v v
/-----+-----\ /-----+-----\
| defrag. | | TTL check |
\-----+-----/ | dec. TTL |
| \-----+-----/
v hook NF_IP_LOCAL_IN |
+------+------+ |
| mangle (1) | |
| INPUT | |
+-------------+ |
| filter | v
| INPUT | /-----+-----\
+-------------+ | DF check |
| nat (src)(2)| \-----+-----/
+-------------+ |
| conntrack | |
| confirm | |
+------+------+ hook v NF_IP_FORWARD
| +------+------+
v | mangle (1) |
/------+--------\ | FORWARD |
| local process | +-------------|
\------+--------/ | filter |
| | FORWARD |
v +------+------+
/-----+-----\ |
| route | |
| frag. | |
\-----+-----/ |
| |
v hook NF_IP_LOCAL_OUT |
+------+------+ |
| conntrack | |
| defrag. | |
+-------------+ |
| mangle | |
| OUTPUT | |
+-------------+ v
| nat (dst)(3)| /-----+-----\
| OUTPUT | | frag. |
+-------------+ \-----+-----/
| filter | |
| OUTPUT | |
+------+------+ |
| |
v |
/-----+-----\ |
| reroute | |
\-----+-----/ |
| |
+------------------+ +------------------+
| |
v v hook NF_IP_POST_ROUTING
+---+-----+---+
| mangle (1) |
| POSTROUTING |
+-------------+
| nat (src) |
| defrag. |
| POSTROUTING |
+-------------+
| conntrack |
| confirm |
| frag. |
+------+------+
|
v
(output interface)