
나는 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