Linux에서 다음을 성공적으로 사용하여 "루프백"모드의 새 이중 포트 10Gbps 카드, 즉 한 포트가 다른 포트에 직접 연결되었습니다. 이것은 모두 패킷을 강제로 보내기위한 약간의 부두입니다. 그렇지 않으면 Linux는 커널을 통해 트래픽을 단락시킵니다 (따라서 OP의 문제). 위의 Casey의 답변에서 실제로 외부 라우터가 필요한지 여부는 확실하지 않지만 다음은 완전히 독립적입니다. 두 가지 인터페이스는 eth2와 eth3입니다.
인터페이스에 IP를주고 별도의 네트워크에 배치하십시오.
ifconfig eth2 10.50.0.1/24
ifconfig eth3 10.50.1.1/24
다음으로 이중 NAT 시나리오를 설정합니다. 두 개의 새로운 가짜 네트워크가 다른 네트워크에 도달하는 데 사용됩니다. 도중에 NAT를 가짜 네트워크에 공급하십시오. 도중에 목적지를 수정하십시오. 다른 네트워크의 경우도 마찬가지입니다.
# nat source IP 10.50.0.1 -> 10.60.0.1 when going to 10.60.1.1
iptables -t nat -A POSTROUTING -s 10.50.0.1 -d 10.60.1.1 -j SNAT --to-source 10.60.0.1
# nat inbound 10.60.0.1 -> 10.50.0.1
iptables -t nat -A PREROUTING -d 10.60.0.1 -j DNAT --to-destination 10.50.0.1
# nat source IP 10.50.1.1 -> 10.60.1.1 when going to 10.60.0.1
iptables -t nat -A POSTROUTING -s 10.50.1.1 -d 10.60.0.1 -j SNAT --to-source 10.60.1.1
# nat inbound 10.60.1.1 -> 10.50.1.1
iptables -t nat -A PREROUTING -d 10.60.1.1 -j DNAT --to-destination 10.50.1.1
이제 시스템에 각 가짜 네트워크에 연결하는 방법을 알려주고 arp 항목을 미리 채 웁니다 (MAC 주소를 대체하고 내 것을 사용하지 마십시오).
ip route add 10.60.1.1 dev eth2
arp -i eth2 -s 10.60.1.1 00:1B:21:C1:F6:0F # eth3's mac address
ip route add 10.60.0.1 dev eth3
arp -i eth3 -s 10.60.0.1 00:1B:21:C1:F6:0E # eth2's mac address
이것은 실제로 패킷을 와이어에 넣을 정도로 Linux를 바보입니다. 예를 들면 다음과 같습니다.
ping 10.60.1.1
eth2로 이동하면 소스 IP 10.50.0.1은 10.60.0.1로 NAT가되고 eth3으로 도착하면 10.60.1.1은 10.50.1.1로 NAT가됩니다. 답장은 비슷한 여행을합니다.
이제 iperf를 사용하여 처리량을 테스트하십시오. 올바른 IP에 바인딩하고 연락중인 IP (다른 쪽의 가짜 주소)를 확인하십시오.
# server
./iperf -B 10.50.1.1 -s
# client: your destination is the other end's fake address
./iperf -B 10.50.0.1 -c 10.60.1.1 -t 60 -i 10
트래픽이 실제로 전선으로 나가는 지 확인하십시오.
tcpdump -nn -i eth2 -c 500
카드가 사용되고 있는지 확인하기 위해 / proc / interrupts를 볼 수도 있습니다.
while true ; do egrep 'eth2|eth3' /proc/interrupts ; sleep 1 ; done
어쨌든,이 게시물은이 작업을 수행하는 방법을 검색하는 데 도움이되었고 Q & A 직원에게 감사드립니다.이 게시물이 다른 사람이 나중에이 게시물을 찾는 데 도움이되기를 바랍니다.