얼마 전에 포럼을 읽다가 VPN이 켜져 있을 때 내부에서 SSH에 액세스할 수 있게 해주는 다음 줄을 발견했습니다. VPN 외부에서 추가 트래픽을 허용하도록 조정할 수 있도록 누군가 설명할 수 있나요? 매뉴얼 페이지를 읽었지만 이해가 되지 않습니다.
ip rule add table 128 from 192.168.10.123
ip route add table 128 to 192.168.10.0/24 dev eth0
ip route add table 128 default via 192.168.10.1
답변1
이 질문이 약간 오래되었다는 것을 알고 있지만 방금 몇 시간 동안 문제를 해결했습니다. 따라서 다른 사람이 여기에서 길을 찾는 데 도움이 된다면 덜 기술적인 답변을 시도하겠습니다.
이러한 명령과 그 기능을 이해하려면 몇 가지 사항을 알아야 합니다.
첫째, 트래픽을 캡처하고 VPN을 통해 전달하기 위해 컴퓨터에서 VPN 클라이언트를 실행 중인 경우하다이미 사용자 정의 라우팅 규칙이 있습니다. 귀하가 직접 제어하는 VPN 서버가 아닌 다른 VPN 서비스에 연결하는 경우 일반적으로 원격 서비스는 연결 시 openvpn을 통해 컴퓨터에 라우팅 규칙을 푸시합니다. ip route show
VPN에 연결된 상태에서 명령을 실행하여 볼 수 있습니다 . 여기에 포함된 모든 라인은 tun0
VPN 연결을 나타냅니다.
이것이 tun0
핵심입니다. 커널의 관점에서 보면 네트워크 카드( eth0
또는 enp1s0
무엇이든)는 하나의 네트워크 인터페이스이고 VPN 연결은 두 번째 "가상" 네트워크 인터페이스입니다. VPN이 시작될 때 명령을 실행 하면 ip address
각각 별도의 IP 주소가 정의되어 있음을 알 수 있습니다. 가상 네트워크 인터페이스를 통해 라우팅된 모든 트래픽은 tun0
VPN을 통해 나가고, eth0
인터페이스를 통해 라우팅된 모든 트래픽은 VPN을 우회하여 직접 나갑니다.
에서와 같이OpenVPN 위키, 컴퓨터에서 생성된 트래픽의 "발신" IP 주소는 기본적으로 트래픽을 라우팅하는 장치로 설정됩니다. 즉, VPN에 할당된 IP 주소를 의미합니다 tun0
. 하지만! 일반 물리적 네트워크 장치(예:아니요VPN을 통해), 응답은 다음과 같습니다저것장치의 IP 주소는 "발신" 주소 역할을 합니다. 이제 VPN 공급자가 어떤 라우팅 규칙을 푸시하는지는 중요하지 않습니다. 그들은 단지 나가는 트래픽을 보고 VPN으로 리디렉션하기만 하면 tun0
됩니다. 따라서 상자에 ssh를 시도하면 요청을 받고 응답하지만 응답은 VPN을 통해 전달됩니다. 그런 다음 SSH 클라이언트는 "와, 그 응답은 내가 연결하려는 IP 주소와 완전히 다른 IP 주소에서 왔습니다"라고 말하고 무시합니다. 따라서 ip rule
및 ip route
명령이 들어오는 VPN 클라이언트를 실행하는 컴퓨터에 대한 인바운드 연결을 설정할 수 없습니다.
이 명령에 대한 설정은 다음과 같습니다.정책 기반 라우팅, 이것은 복잡한 주제입니다. 가능한 한 간단하게 하기 위해 커널은 "라우팅 테이블"을 사용하여 이 시스템에 남아 있는 트래픽(이것은 lo
"루프백"의 약어이며 IP 주소가 127.0.0.1인 네트워크 장치입니다)과 어떤 트래픽을 구별합니다. 동일한 시스템 LAN에 있으므로 라우터(게이트웨이라고도 함)를 거치지 않고 대상으로 직접 전송되며 트래픽이 다른 곳으로 이동하지 않습니다. 인터넷에 액세스하려면 컴퓨터에 모든 "기타" 트래픽을 외부 세계에 연결된 라우터로 연결하는 "기본 게이트웨이" 라우팅 항목이 있어야 합니다. 이 모든 일은기본라우팅 테이블은 일반적으로 관심을 가져야 할 유일한 테이블입니다.
그러나 VPN 라우팅 설정은 기본 경로 테이블을 덮어쓰고 tun0
VPN 연결(장치)을 "다른 곳"으로 향하는 모든 트래픽의 기본 경로로 설정합니다. 다행스럽게도 Linux에서는 여러 개의 라우팅 테이블을 갖고 다양한 규칙(정책이라고도 함)을 기반으로 어떤 라우팅 테이블을 어떤 트래픽에 적용할지 선택할 수 있으므로 "정책 기반 라우팅"이라는 이름이 붙었습니다.
ip
이제 위의 맥락에서 관련된 특정 명령을 살펴보겠습니다.
ip rule add table 128 from 192.168.10.123
이렇게 하면 주소 192.168.10.123에서 "발신"되는 모든 트래픽이 기본 라우팅 테이블 대신 라우팅 테이블 128에 따라 라우팅되어야 함을 명시하는 정책 기반 라우팅 규칙이 생성됩니다. [1]ip route add table 128 to 192.168.10.0/24 dev eth0
그러면 로컬 192.168.10.* 서브넷의 "대상" 주소로 모든 트래픽을 전달하는 경로가 표 128에 추가됩니다eth0
.ip route add table 128 default via 192.168.10.1
이는 VPN 게이트웨이 대신 일반 로컬 게이트웨이를 사용하도록 표 128의 기본 경로를 설정합니다.
이제 연결에 응답하는 모든 트래픽 eth0
(따라서 자동으로 "발신" 주소가 있음 192.168.10.123
)은 먼저 표 128을 살펴봅니다. 표 128은 실제로 대상이 LAN에 있으면 직접 라우팅되고 eth0
, 그렇지 않으면 VPN이 아닌 일반 게이트웨이를 통해 라우팅되는 것을 보여줍니다 192.168.10.1
. 하지만포괄적인이 컴퓨터에서 발생하는 트래픽의 기본값은 tun0
기본 라우팅 테이블의 기본 인터페이스이기 때문에 "발신" 주소를 컴퓨터에서 가져오는 것입니다. 모두저것트래픽이 규칙과 일치하지 않으므로 from 192.168.10.123
표 128은 적용 가능하지 않으며 VPN을 통한 라우팅을 나타내는 "기본" 테이블로 이동합니다.
노트:128은 여기서 특별한 것이 아닙니다. 임의로 선택한 번호로 새 라우팅 테이블을 만드는 것뿐입니다. 기본 라우팅 테이블의 번호는 253이며, 사용자 지정 테이블에는 1~252 사이의 번호를 사용할 수 있습니다.
- 기술적으로는 숫자 순서대로 각 테이블의 정책 규칙에 대해 패킷을 확인하고 첫 번째 일치 항목을 기준으로 라우팅하므로 252 이전에 128이 참조되고 패킷은 사용자 정의 라우팅 테이블로 전송되며 . 실패하고 후속 규칙을 확인하고 다른 일치 항목이 없으면 결국 기본 경로 테이블에 대한 경로를 찾습니다. 그러나 테이블 128에 기본 경로가 있으므로 해당 테이블로 전달되는 모든 패킷은 실패하지 않도록 보장됩니다.
답변2
을 위한
ip rule add table 128 from 192.168.10.123
:라우팅 규칙을 조작합니다
ip rule
. 두 개가 필요해선택자그리고행동. 그래서 이 경우에는선택자예from 192.168.10.123
(192.168.10.123은 접두사입니다.)그리고행동예table 128
. 기본적으로 다음과 같습니다. "table 128
다음에서 들어오는 트래픽에 대한 라우팅 규칙을 추가하세요.192.168.10.123
을 위한
ip route add table 128 to 192.168.10.0/24 dev eth0
:ip route
라우팅 테이블에 대한 전반적인 작업을 수행하는 명령입니다 .(당신의 경우에는table 128
조작당하고 있습니다). " 출력 장치로 향하는add
모든 트래픽"이라는 규칙을 만들고 있습니다 .192.168.10.0/24
eth0
~을 위한
ip route add table 128 default via 192.168.10.1
이전과 마찬가지로
ip route
명령은 경로를 조정합니다table 128
. 하지만 여기서 경로는 다음과 같습니다. "모든 트래픽을 라우팅합니다.(default
=IP0/0또는IPv6::/0)에 도착할 다음 홉 라우터 주소입니다192.168.10.1
.(이것은 아마도 개인 네트워크의 기본 게이트웨이일 것입니다.)
이 설명 방식이 여러분에게 혼란을 주기보다는 도움이 되기를 바랍니다.