저는 이런 상황에 직면했습니다. 소프트웨어의 일부가 하드코딩된 IP 주소(예: 196.10.10.100:20000)를 얻었고, 소켓을 바인딩하고 TCP 및 UDP 트래픽을 196.10.10.9:20000(또한 하드코딩됨)으로 보냈습니다. 문제는 시스템이 제대로 작동하려면 소프트웨어의 여러 인스턴스가 서로 다른 호스트에 있어야 한다는 것입니다. 소프트웨어를 수정할 기회가 없습니다.
원래 설정에는 첫 번째 LAN의 MAC를 두 번째 LAN의 MAC에 매핑하는 일종의 비RFC 호환 네트워크 하드웨어가 포함되었습니다. 이제 추가 네트워크 하드웨어 없이 클라이언트의 각 인스턴스와 서버의 호스트만 시뮬레이션해야 합니다. 패킷을 수락하고 각 인스턴스에 대해 별도의 NIC를 사용하여 응답하여 IP 주소가 임의의 서브넷에 있을 것으로 예상하는 (새로운) 서버 소프트웨어가 있습니다.
서버 부분에는 문제가 없는 것 같은데, 같은 IP를 가진 호스트들을 서버에 연결할 수 있는 방법이 생겼습니다. 시스템 소프트웨어를 사용해서 해결하면 문제가 없을 것 같은데 클라이언트 호스트에서 필요한 IP로 인터페이스를 에뮬레이트하고 트래픽을 서버로 리디렉션하여 서버에서 클라이언트 소프트웨어로 트래픽을 보내는 방법을 모르겠습니다( 예상하는 것)은 존재하지 않는 196.10.10.9)에서 나옵니다. iptables를 사용할 수 있다고 들었지만 iptables에 대해 내가 아는 것은 패킷 필터링\NAT 소프트웨어뿐입니다. 나에게 이 조언을 하는 사람은 나보다 훨씬 더 지식이 없기 때문에 나는 이 조언에 회의적일 수 있습니다. 부분적인 솔루션이 있고 DMZ가 없으며 트래픽을 올바른 IP로 리디렉션합니다.
ip netns add vn
ip link add v-eth0 type veth peer name v-local
ip link set v-local netns vn
ip addr add 196.10.10.1/24 dev v-eth0
ip netns exec vn ip addr add 196.10.10.100/24 dev v-local
ip link set v-eth0 up
ip netns exec vn ip link set v-local up
ip netns exec vn ip route add default via 196.10.10.1
echo 1 > /sys/net/ipv4/ip_forward
iptables -P FORWARD DROP
iptables -F FORWARD
iptables -t nat -F
iptables -t nat -A POSTROUTING -s 196.10.10.0/255.255.255.0 -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o v-eth0 -j ACCEPT
iptables -A FORWARD -o eth0 -i v-eth0 -j ACCEPT
이 설정을 사용하면 네임스페이스 컨테이너의 프로세스가 실제 네트워크에 액세스할 수 있지만 필요한 리디렉션은 허용되지 않습니다. eth0의 IP 주소가 196.10.20.100이고 서버의 IP 주소가 196.10.20.9라고 가정합니다. 위 스크립트를 어떻게 수정해야합니까?
1) 196.10.10.100에서 196.10.10.9로 패킷을 리디렉션하여 196.10.20.9로 전송됩니다.
2) 196.10.20.100에서 수신된 패킷을 10.10.10.100으로 리디렉션하시겠습니까?