나는 무엇을 성취하고 싶은가?
내 Linux 컴퓨터(최근 출시된 Raspberry Pi OS의 Raspberry Pi v3)에서 다음 설정을 고려하고 있습니다.
- 기본적으로 VPN 클라이언트로 나가는 모든 연결은
- 인터넷에서 마이박스로 들어오는 연결을 수용하는 VPN 서버
- 청각 장애가 있는 VPN 클라이언트를 우회하고 나를 구렁텅이에서 벗어나게 해주는 "일반" 인터페이스(여기서는 eth0)
저는 인터페이스 #3을 사용하여 ISP가 제공하는 공용 IP(홈 네트워크의 IP)를 얻습니다. 예를 들어, "실제"(VPN이 아닌 클라이언트 읽기) IP를 사용하여 DNS 공급자 계정을 성공적으로 업데이트할 수 있었습니다.
curl https://my.dns.provider/refresh_my_account_id_query --interface etho
+---------------------------------------------------------------+ +-----------------+ +---------+
| My Linux box | | | | |
| | | My home network | | My ISP |
| | | | | |
| +------------+ | | | | | +------------------+
| | VPN Client | Dev: tun0 | IP:<pre-defined by VPN provider> | | | | | | VPN Provider's |
| | (default <-------------------------------------------------------------------------------------------> Servers <---------+
| | outgoing) | | | | | | | | |
| +------------+ | | | | | +------------------+ |
| | | | | | +------v-----+
| +------------+ | | | | | | |
| | | Dev: tun1 | IP:10.8.0.1 | | | | | | Internet |
| | VPN Server <-----------------------------------------------------------------------------------------------------------------> |
| | | | | | | | | |
| +------------+ | | | | | | |
| | | | | | | |
| +------------+ | | | | | | |
| |Only for | Dev eth0 | IP:192.168.0.200 | | --------------------------------------------------------> |
| |explicit VPN<--------------------------------------------------------/ | | | | |
| |bypass | | | | | | | |
| +------------+ | | | | | +------------+
| | | | | |
| | | | | |
+---------------------------------------------------------------+ +-----------------+ +---------+
내가 겪고 있는 문제
두 개의 VPN(인터페이스 tun0 및 tun1)을 동시에 작동시킬 수 없습니다. 두 VPN이 모두 작동되고 구성된 후에는 더 이상 인터넷에서 VPN 서버에 연결할 수 없습니다. 나머지는 괜찮습니다. 인터페이스 tun0 및 tun1에 대한 라우팅 및 규칙이 설정되면 모든 수신 트래픽이 기본 인터페이스에서만 진행되거나 삭제되는 것 같습니다. 확실하지 않습니다.
각 인터페이스의 현재 설정
내 설정 설명의 인터페이스 목록을 따르세요.
systemctl
클라이언트를 서비스로 실행하는 데 사용되는 일반 openvpn 구성 파일을 사용하여 VPN 클라이언트를 설정했습니다 . 이는 그 자체로는 잘 작동합니다. 즉,tun0
모든 트래픽이 기본적으로 해당 인터페이스를 통과합니다.- 을 사용하여 VPN 서버를 설정했습니다
PiVPN
. 정말 간단하고 한 번만 시도하면 작동됩니다. - 수동으로 추가하고
ip route default via 192.168.0.1 dev eth0 proto dhcp src 192.168.0.200 metric 202
있는데 예상대로 작동합니다.
상자를 시작하면 3개의 인터페이스가 모두 나타나며( 상단에 lo
) ip route
다음을 제공합니다.
0.0.0.0/1 via 172.94.109.161 dev tun0
default via 172.94.109.161 dev tun0
default via 192.168.0.1 dev eth0 proto dhcp src 192.168.0.200 metric 202
10.8.0.0/24 dev tun1 proto kernel scope link src 10.8.0.1
128.0.0.0/1 via 172.94.109.161 dev tun0
172.94.109.4 via 192.168.0.1 dev eth0
172.94.109.160/28 dev tun0 proto kernel scope link src 172.94.109.163
192.168.0.0/24 dev eth0 proto dhcp scope link src 192.168.0.200 metric 202
위에서 내 이해는 다음과 같습니다.
- 라인 1과 2는 동일하며 의도한 대로 VPN 클라이언트를 통해 모든 기본 발신 트래픽을 가져오도록 설계되었지만 그 중 하나를 제거해야 합니다.
- eth0 인터페이스를 직접 대상으로 지정할 때 VPN 클라이언트를 우회하려고 3번 라인을 수동으로 추가했는데 다른 문제가 발생합니까?
- 4행의 목적은 VPN 서버 IP에서 수신된 모든 내용을 내 VPN 서버 tun1에서 관리하도록 하는 것입니다.
- 5~8행 잘 모르겠습니다. VPN 클라이언트가 제대로 작동해야 하는 것 같습니다.
내가 원하는 것
현재 IP 라우팅에 대한 이해를 확인하려면 또 다른 두뇌가 필요합니다. 그런 다음 여기에 설명된 설정을 구현하는 올바른 방법에 대한 조언을 찾고 있습니다.
지금까지 나는 내 연구를 바탕으로 많은 규칙과 경로 설정을 시도했지만 성공하지 못했습니다. 또한 IP 규칙이나 라우팅 옵션을 통해 발신 및 수신 패킷을 표시하는 방법에 대해 조금 읽었 mangle
지만 기존 문헌은 소화하기가 매우 어렵고 더 시도하기 전에 실제로 필요한 도구가 무엇인지 이해하고 싶습니다.
어떤 도움이라도 대단히 감사하겠습니다. 구성에 대한 세부 정보를 제공하거나 새로운 구성을 시도해 보도록 하겠습니다. 문의해 주세요.
답변1
Martin의 답변을 보완하려면 다음을 수행하십시오.
VPN을 통한 기본 경로는 VPN 클라이언트에 대한 응답이 원격 VPN 서버를 통해 전송되므로 로컬 VPN 서버를 손상시킵니다. 이렇게 하면 응답이 다른 IP 주소에서 나오므로 원격 클라이언트 VPN이 더 이상 작동하지 않습니다.
기본 경로를 로컬 네트워크로 제한하려면 정책 라우팅을 사용해야 합니다. 어쩌면 이건빠른 소개설정하는 데 도움이 될 수 있습니다. 이것슈퍼유저에게 질문하기도움이 될 수도 있습니다.
OpenVPN을 사용하여 기본 경로를 설정하지 않습니다.
그런 다음 수신 VPN의 경로를 동일한 경로 테이블에 추가하면 원하는 방식으로 작동합니다.
답변2
라우팅 테이블에 대한 몇 가지 통찰력은 다음과 같습니다.
default via 172.94.109.161 dev tun0
이것이 기본 경로입니다. 보다 구체적인 경로와 일치하지 않는 모든 트래픽은 해당 경로를 사용합니다. 이 경로는 기본적으로 dhcp에 의해 설정됩니다.
0.0.0.0/1 via 172.94.109.161 dev tun0
128.0.0.0/1 via 172.94.109.161 dev tun0
이 두 경로는 아마도 openvpn에서 온 것입니다 - openvpn 매뉴얼 페이지에서:
def1 -- 0.0.0.0/0 대신 0.0.0.0/1 및 128.0.0.0/1을 사용하여 기본 게이트웨이를 재정의하려면 이 플래그를 사용합니다. 이는 원래 기본 게이트웨이를 덮어쓰지만 지우지 않는다는 장점이 있습니다.
따라서 기본적으로 이는 기본 게이트웨이를 무효화하고 삭제하지 않고 새 게이트웨이로 대체합니다. 이 옵션이 없으면 VPN 터널을 통해 모든 트래픽을 리디렉션하는 기본 게이트웨이는 DHCP 임대가 만료되면 덮어쓰여집니다.
172.94.109.4 via 192.168.0.1 dev eth0
"redirect_gateway" 옵션으로 openvpn을 시작할 때마다 VPN 소프트웨어는 remote
VPN 터널을 우회하고 연결된 기본 인터페이스를 통해 직접 트래픽을 보내는 VPN 게이트웨이(openvpn 구성에서 해당 옵션이 있는 라인) 에 경로를 추가해야 합니다. ISP로 - 그렇지 않으면 터널이 설정되자마자 연결이 끊어지게 되는데, 이는 여기서 가장 가능성이 높은 시나리오입니다.
172.94.109.160/28 dev tun0 proto kernel scope link src 172.94.109.163
192.168.0.0/24 dev eth0 proto dhcp scope link src 192.168.0.200 metric 202
이러한 경로는 시스템 설정 경로입니다. 이러한 경로는 네트워크 인터페이스를 구성할 때마다 자동으로 생성되므로 동일한 서브넷의 모든 이웃 호스트에 연결할 수 있습니다. 조언: 이 경로를 건드리지 마세요!
라우팅을 보면 잘못된 IP가 사용되고 있는 것 같습니다... "tun1" openvpn 서버를 비활성화하고 VPN-client 인스턴스만 시작한 다음 라우팅을 위 표와 비교합니다. 내 생각엔 이 비교를 통해 설정이 작동하지 않는 이유를 찾을 수 있을 것입니다...
또한 기본 경로를 수동으로 추가해서는 안 되며(포인트 3) openvpn이 자동으로 수행하도록 하십시오.
도움이 되었기를 바랍니다!