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 つしかないとします。