답변을 찾고 있었지만 아무것도 찾지 못했습니다.
대부분의 똑똑한 인터넷 사용자처럼 저도 VPN을 사용합니다. 내가 틀렸다면 정정할 수 있지만 VPN을 설정할 때(적어도 OpenVPN 프로토콜을 사용하여) 네트워크 라우팅은 다음과 같습니다.
app 1 -----
|
app 2 -----+ ----- tun0 -----> outside world
|
app 3------+
그런 다음 VPN이 꺼져 있는 경우:
app 1 -----
|
app 2 -----+ -----------> outside world [No protection :(]
|
app 3------+
다른 원천tun0
VPN IP 주소로부터의 트래픽을 허용하도록 설정합니다 . 그러나 대부분의 경우 IP 주소는 알 수 없거나 무작위로 선택됩니다(즉, 사용자가 무작위로 선택).
이것에 대해 몇 시간을 보낸 후에 내가 겪고 있는 문제는 그것이 작동하도록 할 수 있다는 것입니다(tun0이 어디로든 갈 수 있도록 허용함).오직tun0이 이미 활성화된 경우오직이 연결 세션 동안. 연결을 종료하면 규칙이 허용하지 않습니다.어느트래픽이 통과하고 VPN에 연결할 수도 없습니다.
이상하게도 Android에서는 이 작업이 매우 쉽습니다. 내가 해야 할 일은 AFWall+(내가 가장 좋아하는 VPN)를 설치하고 VPN에 대한 네트워크 연결을 허용한 다음 내가 원하는 앱의 VPN 연결만 허용하는 것뿐이었습니다. 다른 모든 사람은 차단되며 VPN이 다운되면 트래픽이 허용되지 않습니다.PC에서는 왜 그렇게 어려운가요?
너무 길어요.모든/일부 트래픽이 tun0으로 이동하도록 허용한 다음 트래픽이 tun0에서 어디로든 이동하도록 허용하는 ufw 규칙이 있습니까?
답변1
나는 그것을 다음과 같이 취급할 것이다.XY 문제: 귀하의 목표(X)는 특정 응용 프로그램이 VPN을 사용하도록 하고 VPN이 실패할 경우 인터넷 연결을 중지하는 것입니다. 너생각하다이를 위해서는 방화벽 규칙과 킬 스위치를 사용해야 하지만 더 쉬운 해결책이 있습니다.네트워크 네임스페이스.
따라서 새 네트워크 네임스페이스에 인터페이스를 생성하도록 OpenVPN을 설정하십시오 tun
(예:이 문제). 그런 다음 이 네임스페이스 내의 VPN을 통해서만 인터넷에 액세스해야 하는 모든 애플리케이션을 시작합니다(사용 방법은 ip netns exec
위 링크 참조). VPN이 실패하면 애플리케이션은 더 이상 인터넷에 액세스할 수 없습니다. 가격이 다시 오르면 다시 방문할 수 있습니다.
보너스로, 기본 네임스페이스에서 실행되는 모든 애플리케이션은 VPN 없이도 인터넷에 직접 액세스할 수 있습니다(따라서 연결 속도가 더 빨라집니다).
방화벽 규칙을 사용하여 이를 수행하는 것은 더 복잡합니다.틀림없이VPN과 연결된 모든 IP 주소를 알고 난 후에만 방화벽 규칙을 설정할 수 있습니다. 방화벽은 IP를 기반으로 작동하므로 이 문제를 해결할 방법이 없습니다.
AFWall+가 실제로 무엇을 하는지 전혀 모르겠습니다(알아보셨나요?). 어쩌면 내부적으로 네임스페이스를 사용하는 것일 수도 있습니다.