wlan0
내 컴퓨터에는 ( 기본 경로) 및 의 두 가지 인터페이스가 있습니다 tun0
. tun0
인터페이스는 로컬 네트워크이고 해당 IP 범위는 이고 172.16.150.0/24
, 내 컴퓨터(컴퓨터 A)의 IP 주소는 이고 172.16.150.1
, 다른 컴퓨터(컴퓨터 B)의 IP 주소는 입니다. 의 IP 주소는 입니다 172.16.150.128
. 나는 Wi-Fi 핫스팟을 설정했고 그것은 나를 위해 또 다른 인터페이스를 만들었습니다 ap0
. ap0
인터페이스의 모든 트래픽을 머신 B를 통해 라우팅 하고 싶습니다 (따라서 게이트웨이는 이어야 함 172.16.150.128
).
$ ip route
default via 192.168.0.1 dev wlan0 proto dhcp src 192.168.0.179 metric 1024
172.16.150.0/24 dev tun0 proto kernel scope link src 172.16.150.1 metric 1024
192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.179 metric 1024
192.168.0.1 dev wlan0 proto dhcp scope link src 192.168.0.179 metric 1024
192.168.12.0/24 dev ap0 proto kernel scope link src 192.168.12.1
이 시점에서 기본 경로는 이므로 모든 트래픽을 내 홈 라우터의 인터페이스로 192.168.0.1
라우팅합니다 .wlan0
ap0
저는 숙련된 Linux 사용자가 아니기 때문에 Linux 커널이 게이트웨이를 통해 모든 트래픽을 라우팅하도록 하는 방법을 잘 모르겠습니다 172.16.150.128
. 그러나 제가 시도한 방법은 다음과 같습니다.
$ ip route add default 192.168.12.0/24 via 172.16.150.128
Error: either "to" is duplicate, or "192.168.12.0/24" is a garbage.
192.168.12.0/24
여기서는 커널이 서브넷의 모든 트래픽을 게이트웨이를 통해 라우팅 하도록 하려고 합니다 172.16.150.128
.
$ ip route add 192.168.12.0/24 via 172.16.150.128
RTNETLINK answers: File exists
이전 명령과 동일하지만 default
단어가 없습니다. 도움이 될 수 있다는 내용을 읽었 ip addr flush dev ap0
지만 인터페이스와 해당 IP 주소가 재설정되므로 수동으로 IP 주소를 복원 ip addr add
하거나 Wi-Fi 핫스팟을 다시 시작해야 합니다.
인터페이스를 새로 고치고 싶지 않지만 경로를 default
특정 게이트웨이로 변경하고 싶기 때문에 이것이 올바른 접근 방식이라고 생각하지 않습니다.
어떻게 해야 하나요?
답변1
여기서는 단순한 라우팅만으로는 충분하지 않습니다. 단순 라우팅은 목적지를 고려합니다. 그러나 여기서 목표는 소스에 따라 경로를 변경하는 것입니다. 그렇게 하는 것을 소위정책 라우팅. Linux에서는 소스 IP 주소나 소스 패킷의 수신 인터페이스와 같은 다른 선택기(대상뿐만 아니라)를 사용하여 대체 경로 테이블을 선택함으로써 이를 수행합니다. 이러한 백업 라우팅 테이블에는 다른 기본 경로를 포함한 다른 경로가 있을 수 있으며, 궁극적으로 일반적인 경로와 다른 패킷 경로를 선택합니다.기본라우팅 테이블.
이것은 일반적으로 일부와 함께 사용됩니다.ip rule
add ... lookup TABLE
+ 일부ip route add ...
table TABLE
, 해결하려는 문제에 맞게 선택 항목을 조정하세요. ip rule ...
다양한 처리를 위한 소스 기반 선택기가 있는 경우 가 많으며 ip route ...
이 경우 대체 대상이 있을 수 있습니다.
따라서 이 경우 아래와 같이 할 수 있습니다.
백업 라우팅 테이블 준비(테이블 1000 사용)
이 테이블에는 필요한 모든 것이 포함되어야 하므로 기본 라우팅 테이블의 일부가 수동으로 복사됩니다.
ip route add 192.168.12.0/24 dev ap0 table 1000 ip route add 172.16.150.0/24 dev tun0 table 1000
물론 목표를 달성하기 위한 대체 기본 경로도 있습니다.
ip route add default via 172.16.150.128 dev tun0 table 1000
두 개의 관련 인터페이스에 대한 대체 라우팅 테이블을 선택하십시오.
ip rule add iif ap0 lookup 1000 ip rule add iif tun0 lookup 1000
라우팅 규칙은 다음과 같아야 합니다.
# ip rule 0: from all lookup local 32764: from all iif tun0 lookup 1000 32765: from all iif ap0 lookup 1000 32766: from all lookup main 32767: from all lookup default
이렇게 하면 머신의 라우팅 문제가 해결됩니다(단, 원격 시스템으로의 라우팅 또는 NAT 사용에 대한 다음 섹션 참조).
의 모든 패킷은
ap0
대체 라우팅 테이블을 사용하여 다음으로 전송됩니다.tun0
여기에는 172.16.150.128을 통과하는 인터넷으로 전송되는 트래픽이 포함됩니다. 세부정보: 이 시스템으로 특별히 전송된 트래픽은 실제로현지의첫 번째는 라우팅 테이블이므로 여전히 평소대로 작동합니다.
들어오는 모든 패킷은
tun0
대체 라우팅 테이블을 사용합니다.(이 시스템으로 전송되면 실제로현지의라우팅 테이블은 먼저 해당 시스템으로 라우팅합니다)
192.168.12.0/24로 보내는 경우 다음을 사용합니다.
ap0
자세한 내용: 다른 경우에는 경로 조회를 통해 트래픽이 172.16.150.128로 다시 전송됩니다.
하지만 실제로는 이런 일이 절대 일어나서는 안 됩니다.
다운 되었다 ap0
가 tun0
다시 올라가면 테이블 1000의 관련 경로가 손실되므로 다시 추가해야 합니다.
한 가지 문제가 남아 있습니다. 172.16.150.0/24 LAN의 시스템이 192.168.12.0/24에 대해 아무것도 모르는 경우 응답 트래픽을 해당 시스템(172.16.150.1)으로 다시 보내지 않습니다. 그들은 아마도 172.16.150.128인 자체 기본 게이트웨이를 사용할 것입니다. 마찬가지로 172.16.150.128은 192.168.12.0/24에 대한 모든 트래픽을 자체 업스트림 게이트웨이로 보낼 수 있습니다.떠나다이 기계를 통해서가 아니라 이 기계에서.
이 문제를 해결하려면:
이 LAN을 172.16.150.0/24의 다른 시스템에 알리십시오(선호).
172.16.150.128에 경로를 추가하는 것만으로도 충분합니다. 172.16.150.0/24의 다른 시스템은 172.16.150.128을 통해 패킷을 보내려고 시도하고 172.16.150.1을 통해 패킷을 라우팅하는 것 외에도 ICMP 리디렉션도 보냅니다. 직접 그곳으로 보내는 시스템. 172.16.150.128 시스템에서도 Linux를 실행하는 경우 이는 간단합니다.
ip route add 192.168.12.0/24 via 172.16.150.1
모든 시스템은 정확히 동일한 경로를 직접 추가할 수도 있습니다. DHCP를 통해 구성하는 경우 DHCP 옵션 121(이전 Windows 클라이언트의 경우 옵션 249일 수 있음)을 사용하여 DHCP 구성에 이 설정을 추가해야 하지만 이는 이 답변의 범위를 벗어납니다.
그렇지 않고 이전 변경 사항을 완료할 수 없는 경우 NAT를 사용하십시오(예: 172.16.150.128을 제어할 수 없음).
172.16.150.0/24(특히 172.16.150.128)의 시스템에서 올바른 라우팅을 설정할 수 없는 경우에도 NAT를 사용하여 모든 192.168.12.0/24를 연결 가능한 172.16.150.1로 축소할 수 있습니다. 기계에 추가하십시오:
iptables -t nat -A POSTROUTING -s 192.168.12.0/24 -o tun0 -j MASQUERADE
이 방법을 사용하면 192.168.12.0/24에서 172.16.150.0/24까지 그리고 172.16.150.128을 통해 응답 패킷을 따라 인터넷에 도달하는 트래픽이 허용되지만, 다른 모든 서비스 시스템에서 192.168.12.0/24에 대한 액세스는 허용되지 않습니다. 예외를 생성하려면 특정 포트/서비스에 대한 추가 NAT 설정이 필요합니다.