오래된 게임의 방송을 올바르게 설정하는 방법을 배우고 싶습니다. 저는 특히 로컬 네트워크에서 실행되고 192.168.0.0/16 서브넷의 게임만 검색하는 워크래프트 3 게임에 관심이 있습니다.
내 임무는 마치 로컬 네트워크에 있는 것처럼 Linux 및 Windows 시스템에서 게임이 실행되도록 만드는 것입니다.
초기 데이터:
- 로컬 인터페이스: eth0
- 로컬 주소: 192.168.20.75
- VPN 인터페이스: tun0
- VPN 주소: 192.168.55.1
- 게임 포트: 6112
이제 이상하게 보이는 작동하는 솔루션이 생겼습니다.
- 워크래프트3를 부팅해서 로컬 게임을 만들었는데 0.0.0.0:6112까지 올라갔습니다.
- 라우팅 규칙 개발
ip route add 255.255.255.255 dev tun0
- 방송 소스를 바꾸는 규칙을 만들고 있어요
iptables -tnat -A POSTROUTING -p udp -m udp --dport 6112 -j SNAT --to-source 192.168.55.1
짜잔, 게임이 클라이언트의 로컬 네트워크에 나타납니다
이 상황에서 더 안정적이고 덜 "이상한" 솔루션이 있습니까? 나를 혼란스럽게 하는 것은 모든 255.255.255.255를 해당 tun0
인터페이스 로 리디렉션해야 한다는 것입니다.
답변1
나는 iptables에서 내 문제에 대한 해결책을 찾았지만 그것이 나에게 도움이 될 수 없다는 것이 밝혀졌습니다. 온라인 채팅에서 nfttables를 조사하라는 지시를 받았고 몇 시간 후에 이 솔루션을 찾았습니다.
MANGLE 체인의 INPUT 및 OUTPUT에 대한 2개의 테이블 생성
nft 'add chain ip mangle OUTPUT { type filter hook output priority 150; policy accept; }'
nft 'add chain ip mangle INPUT { type filter hook input priority 150; policy accept; }'`
트래픽을 다른 인터페이스로 복사
nft add rule mangle INPUT iifname eth0 ip daddr 255.255.255.255 udp dport 6112 meta mark set 2 dup to 255.255.255.255 device tun0
로컬 네트워크 인터페이스(eth0)에서 트래픽을 가져와서 수신 주소가 브로드캐스트(255.255.255.255)에서 오는지 확인하고 포트 6112로 이동합니다. 조건이 true이면 "2"로 표시하고 포트 6112로 보냅니다. 주소 255.255.255.255, VPN(tun0) 인터페이스에만 해당됩니다.
이 단계에서 우리는 VPN의 장치에서 필요한 트래픽을 확인하기 시작했으며 소스 주소만 로컬 네트워크의 소스와 동일합니다. 이제 이 문제를 해결해 보겠습니다.
nft add rule mangle OUTPUT oifname tun0 meta mark 2 counter ip saddr set 192.168.55.5
여기서는 레이블이 "2"인 tun0 인터페이스에서 들어오는 트래픽의 소스 주소가 VPN 네트워크의 주소로 대체되었는지 확인합니다. 그렇지 않으면 브로드캐스트를 통해 액세스할 때 트래픽이 로컬 네트워크 주소로 흐릅니다.