이더넷 케이블을 통해 2개의 라우터가 연결되어 있습니다. 보조 라우터에는 DHCP 서버가 비활성화되어 있으며 IP 주소는 192.168.1.2입니다. 두 라우터 모두 서로 다른 인터넷을 사용합니다. 더 낮은 메트릭을 사용하여 다른 기본 게이트웨이를 생성하면 두 번째 네트워크를 기본 네트워크로 사용할 수 있습니다.
ip route add default via 192.168.1.2 dev eno1 metric 10
예상대로 작동합니다.
이제 두 네트워크를 동시에 사용하려고 합니다. Linux 사용자를 생성하고 모든 사용자 트래픽을 보조 게이트웨이를 통해 보낼 수 있습니까? 다음 명령을 시도했습니다.
useradd kreator
ip rule add fwmark 42 table 42
ip route add default via 192.168.1.2 dev eno1 table 42 metric 200
iptables -t mangle -A OUTPUT -m owner --uid-owner kreator -j MARK --set-mark 42
iptables -t nat -A POSTROUTING -o eno1 -m mark --mark 42 -j SNAT --to-source 192.168.1.2
그런 다음 실행했는데 sudo -u kreator ping google.com
아무것도 기록되지 않았습니다. 내가 무엇을 놓치고 있나요?
저는 Arch Linux를 사용하고 있으며 네트워크 관리자는 NetworkManager 데몬입니다.
답변1
의견에 따르면 접근 방식은 견고했습니다.
- 42 의 패킷에 대한 라우팅 결정을 위해 표 42를 보도록 OS에 지시합니다
fwmark
.ip rule add fwmark 42 table 42
- 해당 테이블에 대체 기본 경로를 추가합니다.
ip route add default via 192.168.1.2 dev eno1 table 42 metric 200
- 다음을 사용하여 사용자가 소유한 프로세스에서 발생하는
mangle
모든 아웃바운드 패킷(체인 내)을 표 에 표시합니다 .OUTPUT
kreator
42
iptables -t mangle -A OUTPUT -m owner --uid-owner kreator -j MARK --set-mark 42
이 시점에서 사용자로부터 시작된 패킷은 kreator
원하는 대로 표 42의 대체 기본 경로로 표시되고 라우팅됩니다. 체인을 조정하는 추가 iptables
명령은 POSTROUTING
소스 IP를 보조 라우터의 IP로 변경하고 라우터가 패킷을 삭제하게 하므로 오류가 발생했습니다.