VPN에 연결된 컴퓨터에 대한 SSH 연결 허용

VPN에 연결된 컴퓨터에 대한 SSH 연결 허용

내 질문:

저는 Ubuntu 22.04를 사용하고 있으며 ExpressVPN의 cli 도구를 사용하여 ExpressVPN으로 VPN을 설정하고 있습니다. ExpressVPN에서는 ovpn 구성 파일도 제공하므로 인증 정보를 유지하면서 필요에 따라 구성을 조정할 수 있습니다.

VPN을 사용하기 전에는 홈 라우터에서 포트 22를 전달했고 네트워크 외부에서 컴퓨터로 SSH를 통해 연결할 수 있었습니다.

이제 머신이 VPN에 연결되면 SSH를 통해 연결할 수 없습니다.

내가 시도한 것:

먼저, tcpdump를 사용하여 문제가 내가 생각했던 것, 즉 라우터에 연결된 기본 인터페이스에서 들어오는 인바운드 연결과 ExpressVPN/OpenVPN tun0에서 생성된 인터페이스로 나가는 아웃바운드 패킷인지 확인했습니다.

tcpdump 출력의 일부:

19:17:22.488812 enp5s0 In  IP [src ip omitted] > 192.168.1.20.ssh: Flags [S], seq 2135016686, win 65535, options [mss 1400,sackOK,TS val 58875528 ecr 0,nop,wscale 9], length 0    
19:17:22.488853 tun0  Out IP 192.168.1.20.ssh > [src ip omitted]: Flags [S.], seq 2642908921, ack 2135016687, win 64900, options [mss 1310,sackOK,TS val 638298497 ecr 58875528,nop,wscale 7], length 0    
19:17:23.514229 tun0  Out IP 192.168.1.20.ssh > [src ip omitted]: Flags [S.], seq 2642908921, ack 2135016687, win 64900, options [mss 1310,sackOK,TS val 638299523 ecr 58875528,nop,wscale 7], length 0    
19:17:23.515183 enp5s0 In  IP [src ip omitted] > 192.168.1.20.ssh: Flags [S], seq 2135016686, win 65535, options [mss 1400,sackOK,TS val 58876582 ecr 0,nop,wscale 9], length 0    
19:17:23.515204 tun0  Out IP 192.168.1.20.ssh > [src ip omitted]: Flags [S.], seq 2642908921, ack 2135016687, win 64900, options [mss 1310,sackOK,TS val 638299524 ecr 58875528,nop,wscale 7], length 0    
19:17:25.515204 enp5s0 In  IP [src ip omitted] > 192.168.1.20.ssh: Flags [S], seq 2135016686, win 65535, options [mss 1400,sackOK,TS val 58878582 ecr 0,nop,wscale 9], length 0    
19:17:25.515227 tun0  Out IP 192.168.1.20.ssh > [src ip omitted]: Flags [S.], seq 2642908921, ack 2135016687, win 64900, options [mss 1310,sackOK,TS val 638301524 ecr 58875528,nop,wscale 7], length 0    
19:17:27.546040 tun0  Out IP 192.168.1.20.ssh > [src ip omitted]: Flags [S.], seq 2642908921, ack 2135016687, win 64900, options [mss 1310,sackOK,TS val 638303555 ecr 58875528,nop,wscale 7], length 0    

이 스레드에 대한 답변에 제공된 지침을 따르려고 했습니다. VPN 서버에 연결한 후 SSH가 터미널에 진입하도록 허용하는 방법 성공하지 못했습니다.

제안된 솔루션이 왜 작동하지 않는지 이해할 수 없습니다.

본질적으로 나에게 필요한 것은 tun0이 아닌 해당 네트워크에 할당된 인터페이스의 공용 IP를 통해 네트워크 외부에서 연결을 열어두는 방법입니다.

ovpn 정의(또는 명령줄)에서 경로를 조작하여 이를 수행할 수 있습니까? 아니면 iptables를 사용하는 것이 더 낫습니까? 아니면 제안된 솔루션을 사용하여 추가한 경로가 올바르지 않은 것일까요?

링크된 스레드에서 제안된 솔루션을 시도하는 동안 다음 규칙과 경로를 추가했습니다.

ip rule add from x.x.x.x table 128
ip route add table 128 to 255.255.255.0/24 dev enp5s0
ip route add table 128 default via 192.168.1.20

여기서 xxxx는 VPN에 연결되지 않은 경우의 공용 IP입니다.

VPN에 연결한 후의 경로는 다음과 같습니다.

0.0.0.0/1 via 100.64.100.5 dev tun0 
default via 192.168.1.1 dev enp5s0 proto dhcp metric 100 
10.0.0.0/8 via 192.168.1.1 dev enp5s0 
100.64.100.1 via 100.64.100.5 dev tun0 
100.64.100.5 dev tun0 proto kernel scope link src 100.64.100.6 
128.0.0.0/1 via 100.64.100.5 dev tun0 
169.254.0.0/16 dev tun0 scope link metric 1000 
172.16.0.0/12 via 192.168.1.1 dev enp5s0 
173.239.199.150 via 192.168.1.1 dev enp5s0 
192.168.0.0/16 via 192.168.1.1 dev enp5s0 
192.168.1.0/24 dev enp5s0 proto kernel scope link src 192.168.1.20 metric 100

VPN에 연결하면 이 모든 경로가 자동으로 추가됩니다. VPN 연결이 없는 경로는 다음과 같습니다(도움이 되는 경우).

default via 192.168.1.1 dev enp5s0 proto dhcp metric 20100 
192.168.1.0/24 dev enp5s0 proto kernel scope link src 192.168.1.20 metric 100 

새로운 노선:

0.0.0.0/1 via 100.64.100.5 dev tun0 
default via 192.168.1.1 dev enp5s0 proto dhcp metric 100 
10.0.0.0/8 via 192.168.1.1 dev enp5s0 
100.64.100.1 via 100.64.100.5 dev tun0 
100.64.100.5 dev tun0 proto kernel scope link src 100.64.100.6 
128.0.0.0/1 via 100.64.100.5 dev tun0 
169.254.0.0/16 dev enp5s0 scope link metric 1000 
172.16.0.0/12 via 192.168.1.1 dev enp5s0 
173.239.199.206 via 192.168.1.1 dev enp5s0 
192.168.0.0/16 via 192.168.1.1 dev enp5s0 
192.168.1.0/24 dev enp5s0 proto kernel scope link src 192.168.1.20 metric 100

답변1

연결 문제는 반환 패킷이 다른 인터페이스에서 나온다는 것입니다. 인바운드 패킷은 enp5s0을 통해 들어오고 tun0을 통해 나갑니다.

사용하는 규칙이 변경되어야 합니다.

  • 먼저, 현재 규칙이 이미 호스트(대상)에 도달한 패킷에만 영향을 미치도록 첫 번째 줄을 "to" xxxx로 변경해야 합니다. 따라서 패킷에는 영향을 미치지 않습니다. 이를 "to"로 변경하면 패킷이 호스트를 떠나는 인터페이스/게이트웨이와 소스 IP에 영향을 줍니다.

  • 두 번째 줄 255.255.255.0/24는 유효하지 않으며, 가장 높은 유니캐스트 주소는 223.255.255.254입니다. 따라서 규칙의 두 번째 줄은 일치하지 않습니다.

규칙은 다음과 같아야 합니다.

ip rule add to x.x.x.x table 128
ip route add table 128 default via 192.168.1.1 dev enp5s0 

그러면 SSH 문제가 해결됩니다.

경로에 대한 몇 가지 추가 참고사항:

0.0.0.0/1은 ips 0.0.0.1 - 127.255.255.254를 나타냅니다. - 이것이 당신이 원하는 것이라고 생각하지 않습니다. 주소는 0.0.0.0/0이어야 하며 별칭 기본값을 사용할 수 있습니다. **이 경로를 수정하면 더 긴 접두사(보다 구체적인 경로)와 일치하지 않는 모든 트래픽이 인터넷 트래픽을 포함하여 VPN을 통해 라우팅됩니다.

답변2

나는 ProtonVPN에서 동일한 문제를 겪었습니다. 내가 한 일은 거기서 나오는 트래픽의 소스 IP에 대한 고정 경로를 생성한 다음 eth0 인터페이스를 대상으로 사용하는 것이었습니다.

ip route add 2.3.4.5 via 4.4.4.4 dev eth0

그 중 2.3.4.5는 소스 IP이고, 4.4.4.4는 eth0(기본 게이트웨이)의 게이트웨이, eth0은 인터페이스입니다.

관련 정보