Ubuntu에서 HTTP/HTTPS 트래픽에 대해 VPN을 우회하시겠습니까?

Ubuntu에서 HTTP/HTTPS 트래픽에 대해 VPN을 우회하시겠습니까?

나가는 트래픽이 모두 VPN을 통과하는 Ubuntu 14.04 시스템이 있는데, HTTP 및 HTTPS 트래픽이 VPN을 통과하지 않도록 해야 합니다.
정적 라우팅을 살펴봤지만 레이어 3만 처리하는 것 같습니다.
이 설정에 어떻게 접근해야 합니까? 감사해요.

답변1

다른 기본 게이트웨이를 통해 특정 포트로 향하는 패킷을 라우팅하려면 iptables를 사용하여 해당 패킷을 표시한 다음 다른 라우팅 테이블을 통해 라우팅해야 합니다.

따라서 먼저 로컬 게이트웨이(VPN 게이트웨이가 아님)의 기본 게이트웨이를 사용하여 새 라우팅 테이블을 만듭니다.

ip route add table 4 default via 192.168.0.1

그런 다음 대상 포트를 기반으로 필요한 패킷을 표시하십시오.

iptables -t mangle -A PREROUTING -p tcp --dport 80  -j MARK --set-mark 4
iptables -t mangle -A PREROUTING -p tcp --dport 443 -j MARK --set-mark 4

마지막으로 새로 생성된 라우팅 테이블을 통해 표시된 패킷을 라우팅합니다.

ip rule add fwmark 4 table 4

위의 명령을 테스트하지 않았으므로 약간의 조정이 필요할 수 있습니다.

답변2

이를 수행할 수 있는 한 가지 방법은 ip rule및 를 사용하는 것입니다 iptables. 예를 들어 라우팅하려는 트래픽을 표시하는 것입니다.

iptables -I OUTPUT -m tcp -p tcp -m multiport --dports 80,443 -j MARK --set-mark 0x0001

그런 다음 새 라우팅 테이블을 만듭니다.

echo 101 r_http >> /etc/iproute2/rt_tables
ip route add default via 10.0.0.1 dev eth0 table r_http
ip route flush cache

이제 HTTP 및 HTTPS 트래픽이 표시되었으므로 새 라우팅 테이블을 적용하는 규칙을 만들 수 있습니다.

ip rule fwmark 0x0001 table 101

그러면 효과가 있을 것입니다. 독자에게 연습으로 영구적으로 만드는 방법과 기본 경로를 만드는 방법이 있습니다 :-)

답변3

최근에 나는 OP와 비슷한 상황에 직면했습니다. @Cha0s와 @Pablo Martinez가 제공한 답변 덕분에 내 상황에 맞게 사용할 수 있었습니다.

첫째, 둘 다 말했듯이 VPN을 통과해서는 안 되는 패킷을 표시하는 iptables 규칙이 있어야 합니다. @Cha0s가 맹글 테이블에 규칙을 넣은 것이 옳았습니다. iptables 매뉴얼 페이지에 따르면 -j MARK 대상을 수행하려면 mangle 테이블을 사용해야 합니다.

반면에 @Pablo Martinez는 iptables 매뉴얼 페이지에 PREROUTING 체인에서 -j MARK를 사용해야 한다고 나와 있지만 OUTPUT 체인에 넣는 것이 맞습니다. 해당 패킷은 로컬 호스트에서 생성되어 외부로 나가게 됩니다. PREROUTING 체인에서는 처리되지 않습니다. 그러나 OUTPUT 체인은 의미가 있으며, 맹글 테이블도 있습니다. 그래서 제가 사용한 iptables 규칙은 다음과 같습니다.

iptables -t mangle -I OUTPUT -p tcp -m multiport --dports 80,443 -j MARK --set-mark 0x101

그런 다음 새 라우팅 테이블을 만들고 @Pablo Martinez가 설명한 대로 경로를 추가합니다.

echo 101 r_http > /etc/iproute2/rt_tables.d/r_http.conf
ip route add table r_http default via 192.168.0.1 dev enp2s0
ip route flush cache

192.168.0.1을 게이트웨이 또는 라우터(VPN 아님)의 IP로 바꾸고 enp2s0을 네트워크 인터페이스 이름으로 바꾸세요. "ip addr"을 사용하여 인터페이스 이름을 확인할 수 있습니다.

마지막으로 iproute2가 표시를 검사하고 새 라우팅 테이블을 사용할 수 있도록 IP 규칙을 추가합니다.

ip rule add fwmark 0x101 table 101

iptables 규칙을 추가하여 포트 80 및 443으로 이동하는 패킷을 기록할 수 있습니다. 필터 테이블은 맹글 테이블 다음에 처리되고 이를 방지하는 첫 번째 규칙이어야 하기 때문에 해당 규칙은 필터 테이블의 OUTPUT 체인 상단에 추가됩니다. 무시당하고 있습니다.

iptables -I OUTPUT -p tcp -m multiport --dports 80,443 -j LOG --log-prefix "<HTTP/S>" --log-level info

로그 항목은 /var/log/kern.log(Debian 시스템)에 표시되어야 합니다. 모두 MARK=0x101인지 확인할 수 있습니다. 충분한 항목을 수집한 후에는 로깅 규칙을 삭제하는 것을 잊지 마십시오.

cat /var/log/kern.log | grep '<HTTP/S>' | less

패킷이 올바르게 표시되었다고 확신하면 iproute2가 표시된 패킷에 대해 올바른 경로를 선택하는지 확인할 수 있습니다.

ip route get to 8.8.8.8
ip route get to 8.8.8.8 mark 0x101

첫 번째 줄의 결과는 패킷이 VPN 게이트웨이와 터널 장치를 통과한다는 것을 알려줍니다. 두 번째 줄에는 패킷이 자체 게이트웨이와 네트워크 장치를 통과한다는 내용이 표시되어야 합니다.

참고자료:

답변4

프록시를 사용하도록 브라우저를 구성해 볼 수 있습니다.
- DNS에서 프록시를 지정할 수 있지만 이 기술이 익숙하지 않습니다. (IE에서 HTTP 프록시를 사용할 때(또는 사용하지 않을 때) DNS 조회가 작동하는 방식) - 이는 그룹 정책(http://social.technet.microsoft.com/wiki/contents/articles/5156.how-to-force-proxy-settings-via-group-policy.aspx), 문제의 브라우저가 Internet Explorer의 설정을 준수하는 경우 전체 네트워크에 쉽게 배포할 수 있습니다.

하지만 이것이 작동하려면 HTTP 프록시 서버가 필요합니다(https://stackoverflow.com/questions/1994846/open-source-http-or-https-proxy)

이렇게 하면 웹 브라우저 트래픽이 VPN에서 차단되지만 다른 모든 것은 괜찮습니다. 트래픽이 VPN을 통해 라우팅되지 않도록 프록시 서버를 설정하세요.

관련 정보