内部 eth1 インターフェイスから外部 ppp0 インターフェイスへのルーティングの問題

内部 eth1 インターフェイスから外部 ppp0 インターフェイスへのルーティングの問題

pppリンクを使用して2つのLANを接続しようとしています。デフォルトのネットワークトポロジ図がありますが、うまく動作しません。これは見ることができますここ

Routing Problem
================


172.20.0.0/16                                 192.168.2.0/24
              eth1  +-----------------+ eth0                                                  
  172.20.0.1 |======|      Ubuntu     |======| 192.168.2.231
                    |                 |
                    |      Router     |======| 192.168.254.253    192.168.254.254 |=====> To: 172.30.0.0/16
                    +-----------------+ ppp0

172.20.0.0/16 サブネット上のすべてのコンピュータは、eth0 経由でインターネットにアクセスできます。 172.20.0.0/16 サブネット内のすべてのデバイスは、172.20.0.1 をゲートウェイとして使用します。 172.20.0.0/16 サブネットのデバイスで 172.30.0.0/16 サブネットのデバイスを ping すると、eth1 から ppp0 には何も表示されません。私がテストした方法は、172.20.0.0/16サブネット()のデバイスからpingを送信し、tcpdump()を使用してルータの3つのping -s 10240 172.30.0.9インターフェイスをすべて確認することでした。tcpdump -vv -x -X -s 1500 -i eth1これらのインターフェイスのいずれにも ICMP パケットは表示されません。問題はiptablesにあるようです。

Ubuntu ルーターの構成は次のとおりです。

ip route show
default via 192.168.2.1 dev eth0 
172.20.0.0/16 dev eth1  proto kernel  scope link  src 172.20.0.1 
172.30.0.0/16 dev ppp0  scope link 
172.30.0.0/16 via 192.168.250.254 dev ppp0 
192.168.2.0/24 dev eth0  proto kernel  scope link  src 192.168.2.231 
192.168.250.254 dev ppp0  proto kernel  scope link  src 192.168.250.253


cat /proc/sys/net/ipv4/ip_forward 
1
cat /proc/sys/net/ipv4/conf/ppp0/forwarding 
1
cat /proc/sys/net/ipv4/conf/eth0/forwarding
1
cat /proc/sys/net/ipv4/conf/eth1/forwarding
1


iptables --list-rules
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A FORWARD -i eth1 -o eth0 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j ACCEPT
-A FORWARD -i eth1 -o ppp0 -j ACCEPT
-A FORWARD -i ppp0 -o eth1 -j ACCEPT

iptables -t nat --list-rules
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A PREROUTING -d 192.168.250.254/32 -j DNAT --to-destination 172.30.0.1
-A POSTROUTING -o eth1 -j SNAT --to-source 172.20.0.1

iptablesルールのさまざまな組み合わせとさまざまなルーティングオプションを試したことを追加したいと思います。

ベストアンサー1

まず、フィルタリング規則が多少重複しています。決してあきらめずに戦略が受け入れられている場合は、より多くの受け入れルールを追加する必要はありません。パケットはフィルタリングされません。

私がテストした方法は、172.20.0.0/16サブネットのデバイスからpingを送信することでした(ping -s 10240 172.30.0.9)。

私は実際にネットワークを介して巨大な10kByte pingチャンクを送信しようとしたことはありません。なぜそれを行うのかはわかりませんが、56バイトの標準的なpingパケットは、接続を確認するために完全に作業を実行する必要があり、おそらく実行されません。 MTU断片化の問題として。

そして、 tcpdump( tcpdump -vv -x -X -s 1500 -i eth1 ) を使用して、ルータの 3 つのインターフェイスをすべて確認してください。

もちろん確認するときは、tcpdump -i eth1 ...ただ確認するだけだが、eth1それは些細なことだ。

フィルタリングルールがないため、iptablesに問題はありません。少なくとも、一部のインターフェイスにいくつかの入力が必要です。

Pingが送信されるルートを確認しましたか?

ルールの後ろに隠されたアイデアを理解していません。

-A PREROUTING -d 192.168.250.254/32 -j DNAT --to-destination 172.30.0.1

つまり、192.168.250.254でアドレス指定されたパケット(したがってppp0を通過するすべてのパケット)は、172.30.0.1に移動するように書き換えられ、これもppp0でなければなりません(不明です)。後でルーティングフェーズでppp0サブネット172.30.0.0/16に送信されたすべてのパケットは192.168.250.254にルーティングされます。このルールは私にとって破壊的ではなくても役に立ちません。

172.30.0.9または172.30.0.0/16にパッケージを送信するときに、-j MASQUERADE宛先がパッケージをルーティングする方法がわからない場合でも、出発時に応答する場所を知りたいです。

`iptables -t nat -A POSTROUTING -s 172.20.0.0/16 -i ppp0 -j MASQUERADE`

しかし、これはルータのインターフェイスでpingパケットが表示されない問題を解決しません。

私の最初の試みは、そのシステムでtcpdumpを使用して、私が送信したシステムから出てくるpingパケットを確認することでした。

`tcpdump -i eth0 'icmp'

またはppp0を超えるパッケージのみ

`tcpudmp -i eth0 'net 172.30.0.0/16'

172.20.0.0/16 ホスト(ルータではない)に eth0 というインターフェイスが 1 つしかないとします。

おすすめ記事