私はIPがそれぞれ10.0.0.20と192.168.0.20の2つのインターフェースe0とm0を持つ組み込みシステムを持っています。 IP 10.0.0.10を使用してe0に着信する受信パケットは、IP 10.0.0.30を使用して外部サーバーへのm0インターフェイスに転送する必要があります。さらに、m0に返されるトラフィックはe0に返される必要があります。
次のコマンドを使用してパケットを転送しようとしています。
route add -net 10.0.0.0/16 dev m0
iptables -t nat -A PREROUTING -d 10.0.0.30 -j DNAT --to-destination 192.168.0.20
iptables -t nat -A POSTROUTING -s 10.0.0.0/16 -j SNAT --to-source 10.0.0.20
m0でtcpdumpを実行しましたが、結果は表示されませんでした。
何が欠けているのか教えてもらえますか?よろしくお願いします。
1: lo: <LOOPBACK> mtu 65536 qdisc noop
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: e0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq qlen 1000
link/ether 00:a0:c9:00:00:00 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.20/24 brd 10.0.0.255 scope global e0
valid_lft forever preferred_lft forever
inet6 fe80::2a0:c9ff:fe00:0/64 scope link
valid_lft forever preferred_lft forever
3: m0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq qlen 1000
link/ether 00:aa:bb:cc:dd:44 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.20 brd 192.168.0.255 scope global m0
valid_lft forever preferred_lft forever
inet6 fe80::2aa:bbff:fecc:dd44/64 scope link
valid_lft forever preferred_lft forever
4: bcm: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq qlen 1000
link/ether 00:a0:c9:00:00:03 brd ff:ff:ff:ff:ff:ff
inet6 fe80::2a0:c9ff:fe00:3/64 scope link
valid_lft forever preferred_lft forever
5: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000
link/ether 80:3f:5d:09:7f:4b brd ff:ff:ff:ff:ff:ff
6: e0.1@e0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue
link/ether 00:a0:c9:00:00:00 brd ff:ff:ff:ff:ff:ff
inet 127.3.0.254/24 brd 127.3.0.255 scope global e0.1
valid_lft forever preferred_lft forever
inet6 fe80::2a0:c9ff:fe00:0/64 scope link
valid_lft forever preferred_lft forever
[0.1.10] pad# ip rule show
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
[0.1.10] pad# ip ro show
default via 192.168.0.20 dev m0
10.0.0.0/24 dev m0
10.0.0.0/24 dev e0 src 10.0.0.20
127.3.0.0/24 dev e0.1 src 127.3.0.254
192.168.0.0/24 dev m0 src 192.168.0.20
0.1.10] pad# iptables -L -vn
Chain INPUT (policy ACCEPT 1480 packets, 186K 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 914 packets, 158K bytes)
pkts bytes target prot opt in out source destination
0.1.10] pad# iptables -t nat -L -vn
Chain PREROUTING (policy ACCEPT 258 packets, 51912 bytes)
pkts bytes target prot opt in out source destination
0 0 DNAT all -- * * 0.0.0.0/0 10.0.0.30 to:192.168.0.20
0 0 DNAT all -- * * 0.0.0.0/0 10.0.0.30 to:192.168.0.20
0 0 DNAT all -- * * 0.0.0.0/0 10.0.0.30 to:192.168.0.20
Chain INPUT (policy ACCEPT 258 packets, 51912 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 13 packets, 876 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 13 packets, 876 bytes)
pkts bytes target prot opt in out source destination
0 0 SNAT all -- * * 10.0.0.0/16 0.0.0.0/0 to:10.0.0.20
0 0 SNAT all -- * * 10.0.0.0/16 0.0.0.0/0 to:10.0.0.20
答え1
@Mike:すべてのルール/テーブルを更新し、基本から始めて、ネットワーク間の会話が可能であることを確認してください。
echo 1 > /proc/sys/net/ipv4/ip_forward
route add -net 10.0.0.0/16 dev m0
iptables -t nat -A POSTROUTING -o m0 -j MASQUERADE
私の考えでは、これはIPアドレス指定に関係なく、すべての10.0.xxトラフィックをm0にルーティングして偽装する必要があるようです。成功したら、ネットワーク要件に基づいてそれに基づいて構築してください。
答え2
使用して:
netstat -r
IPアドレスの帰属方式が望む方法で動作しないことが容易にわかる。
より正確には次のようになります。
Destination ... Netif
10.0.0.0/24 e0
10.0.0.0/16 m0
192.168.0.0/24 m0
そして10.0.0.20
、10.0.0.10
そして10.0.0.30
すべてに属します10.0.0.0/24
。これは、ルーティングしたい2つのアドレスが、e0
ルーター(「組み込みシステム」がルーターとして機能する場所)の同じネットワーク側()にあることを意味します。
m0
もう一方の端()にルーティングまたはブリッジすることはできません。したがって、トラフィックを変換するプロジェクトを作成することはできませんe0 → m0
。
まず、有効なIPアドレススキームを作成し、次のコマンドを使用して確認します。
netstat -r