Linux를 실행하는 대상에 물리적 인터페이스가 있습니다 eth0
. 이 인터페이스의 IP 주소는 172.16.81입니다.엑스(공용 IP).
eth0:1
IP 주소가 173.1.1인 가상 인터페이스를 만들어야 합니다 .엑스. IP 주소 173.1.1을 사용하여 사용자 지정 포트 49155로 소켓 서버를 실행하겠습니다.엑스.
다른 PC/대상에서는 173.1.1에 ping을 보낼 수 없습니다.엑스. 하지만 소켓 클라이언트 프로그램을 다른 PC에서 실행할 예정입니다. 클라이언트는 172.16.81의 포트 49155에 연결할 수 있어야 합니다.엑스공개 IP.
NAT, 브리징을 시도했지만 성공하지 못했습니다.
서버<-->클라이언트 통신은 다음 iptable 규칙을 사용하여 설정할 수 있습니다.
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
sudo iptables -A FORWARD -i ens33 -o 173.1.1.6 -p tcp --syn --dport 49155 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -i ens33 -o 173.1.1.6 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A FORWARD -i ens33 -o 173.1.1.6 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 49155 -j DNAT --to-destination 173.1.1.6
sudo iptables -t nat -A POSTROUTING -o ens33 -p tcp --dport 49155 -d 173.1.1.6 -j SNAT --to-source 192.168.233.251
sudo iptables -A INPUT -m tcp -p tcp -s 192.168.233.251 --dport 49155 -j ACCEPT
이 시점에서도 외부 PC에서 173.1.1.6으로 ping을 보낼 수 있습니다.
하지만 다음 규칙을 추가했기 때문에 173.1.1.6을 외부 세계에 보이지 않게 만들어야 했습니다.
sudo iptables -A INPUT -d 173.1.1.6 -j DROP
sudo iptables -A OUTPUT -s 173.1.1.6 -j DROP
sudo iptables -A FORWARD -s 173.1.1.6 -j DROP
이 핑이 차단된 후. 서버 <--> 클라이언트 통신도 발생하지 않습니다.
답변1
실제로 구축하려는 것이 무엇인지, 궁극적으로 달성하려는 것이 무엇인지는 모르겠지만 다음 사항을 고려하세요.
동일한 네트워크 인터페이스에 구성되었는지 여부에 관계없이 동일한 호스트에 두 개의 IP 주소를 구성합니다.
이 주소 중 하나에 바인딩된 서버 프로그램이 있습니다.
다른 호스트가 위 프로그램에 의해 바인딩된 주소를 통해 이 호스트에 액세스하는 것을 원하지 않습니다(해당 프로그램/포트에 연결을 시도하는지 여부에 관계 없음).
다른 호스트가 바인딩되지 않은 다른 주소를 사용하여 위 프로그램에 연결할 수 있기를 원합니다.
위의 내용이 어떤 경우에 적합한지 여부에 관계없이 다음 iptables 규칙을 사용하여 이를 수행할 수 있습니다.
(IP 주소가 이고 서버 프로그램이 이에 바인딩되어 있다고 가정하면 192.168.1.2
다른 192.168.2.2
호스트 192.168.2.2:80
가 이에 연결할 수 있기를 원합니다 192.168.1.2:8080
)
iptables -t raw -I PREROUTING -d 192.168.2.2 -j DROP
iptables -t nat -I PREROUTING -d 192.168.1.2 -p tcp --dport 8080 -j DNAT --to-destination 192.168.2.2:80
(참고: 이 규칙은 게이트웨이 등이 아닌 호스트 자체에 적용됩니다. FORWARD
귀하가 이해할 수 없는 규칙을 포함했기 때문에 귀하가 무엇을 하고 있는지, 어디에서 하는지 모르겠습니다)
여기서 핵심은 후속 일치와 마찬가지로 원치 않는 트래픽을 삭제하는 raw (PREROUTING)
대신 사용하는 것입니다 .filter (INPUT)
filter (INPUT)
nat (PREROUTING)
-i
분명히 해당 주소가 완전히 "보이지 않게" 되기를 원하기 때문에 첫 번째 규칙에 인바운드 인터페이스 일치( )를 추가하고 싶지 않을 것입니다 . (좋아요, 아마도 당신은 ! -i
다음과 같은 것을 원할 것입니다. 다시 말하지만, 당신이 정말로 무엇을 하고 싶은지 모르겠습니다.) 두 번째로는 DNAT가 발생하기를 원하는 상황에 따라 다릅니다.
참고로 이런 목적으로 굳이 공인 IP를 사용할 이유는 없다고 생각합니다. 이 호스트가 이동해야 하는 개인 서브넷).
PS 제가 아는 한, 당신이 "가상 인터페이스"라고 부르는 것은 단일 네트워크 인터페이스에서 여러 IP 주소를 구성하는 고대 방식에 지나지 않습니다.