하나의 호스트 안에서 VPN 서버와 클라이언트의 가동이 가능할까요?

slhyvaa의 이미지

안녕하세요, 개발자를 지망하는 학생입니다. 눈팅만 하다가 몇 달간의 고민이 풀리지 않아 이렇게 질문을 올려봅니다...
요점을 말씀드리자면, 하나의 호스트 안에서 VPN 서버와 클라이언트의 가동이 가능할까요?

트래픽 절감을 위한 안드로이드 스트리밍 캐시 시스템을 제작하려 합니다(루트 권한을 이용하여). 재생했던 HTTP 스트리밍 서비스를 데이터 과금 없이 이용할 수 있게 하는 게 요지인데요, 이를 위해 HTTP 요청과 응답을 제어하려고 합니다. 제어의 내용은 다음과 같습니다.
1. 스트리밍 데이터 패킷을 디스크에 캐싱
2. HTTP 스트리밍 요청 판별: Cache Miss와 Cache Hit의 경우를 구분
3. 스트리밍 서버로의 HTTP 요청 차단: Cache Hit의 경우, 요청이 정상 발송된다면 데이터 과금이 발생
4. 저장된 패킷의 헤더를 변조하여 재생: SEQ No., ACK No., Src IP/Port, Dst IP/Port 등을 변조하여 스트리밍을 요청한 어플리케이션을 속임

위 1, 2, 4번은 tcpdump, tcpreplay를 이용해 해결할 수 있지만 캡쳐 툴은 단지 패킷을 복사할 뿐이므로 3번의 경우는 불가능하다고 생각합니다. 그래서, 어플리케이션 계층에서 패킷의 흐름을 제어하기 위하여 VPN 서버와 클라이언트를 하나의 호스트에서 사용하는 방법을 시도하고 있습니다.

두 호스트에서 VPN 연결을 통해 원하는 제어는 (당연히)성공적입니다. 이제 하나의 호스트 안에서 작동시키고자 하는데, 기본 아이디어는 다음과 같습니다.
1. iptables를 이용하여 mangle 테이블에서 실행된 프로세스의 유저에 따라 mark를 붙여 TUN 장치를 이용할지, 아니면 기본 네트워크 장치를 이용할지 결정하여 각각의 routing table을 이용하도록 설계

그러나 하나의 호스트에서 구성하였을 때 서버로 요청이 나가지 않았습니다. 이유를 찾기 위해 ip route의 캐시 테이블을 확인해 보니 다음 링크의 스크린샷과 같이 기본 게이트웨이를 찾지 않는 문제가 있었습니다...
(링크: https://docs.google.com/presentation/d/1Uu7Xm4iKOmE4s9zLUu7TBf_pMd85Gou-rIW_GRONqBQ/pub)

TUN 장치가 Point-to-Point 장치이기 때문에 일반 이더넷 어댑터와 다르게 작동하지 않나 싶습니다. 그래서 OpenVPN의 TAP 장치를 이용하려 구성하려 하는데 한 호스트 안에서 구성한 사례를 찾지 못해 문제를 겪고 있습니다... 공부가 아직 부족한 듯 합니다. 이 방법도 실패한다면 커널의 TCP 부분을 수정하려 합니다.

하나의 호스트 안에서 VPN 서버와 클라이언트의 가동이 가능할까요? 아니면 참고할 만한 책이나 문서 등이 혹여 있을런지 질문드립니다.

어떤 조언이나 질책도 달게 받아들이겠습니다. 즐거운 하루 되시길 바라요..!

slhyvaa의 이미지

자문자답입니다. squid를 사용하는 것이 더 나아보이네요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.