본문으로 건너뛰기

진흙고양이 (mudcat)

소개

미꾸라지 네트웍스에 제공하는 HTTP/TCP/UDP 포트 공유 서비스입니다. https://ngrok.io 와 비슷한 목적의 서비스를 제공하는 것을 목표로 합니다.

이 서비스를 이용하여, 내부망에 있는 서비스를 외부로 공유하는 것을 쉽게 수행할 수 있습니다. 현재 다음과 같은 프로토콜을 지원하고 있습니다.

  • HTTP

  • TCP

  • UDP

명령어 1 개를 이용하여 쉽게 설치 및 이용이 가능합니다.

다운로드

https://www.mudcat.io/ 에서 프로그램을 다운로드하실 수 있습니다.

mudcat 프로그램은 사용자 입장에서는 실행 파일 1 개로 이루어져 있기 때문에, 손쉽게 다운로드 및 실행을 할 수 있습니다.

mudcat 실행 옵션

mudcat 프로그램을 실행할 경우 아래와 같은 화면을 보실 수 있습니다. 기본적으로 mudcat 은 명령어를 기준으로 사용법이 조금씩 달라집니다.

$ ./mudcat 
Usage: mudcat [-vV] <command> [<args>]

Options:
-v # Increase the verbose level.
-V, --version # Show the version.

Commands:
http # Create a HTTP tunnel.
node # Show the mudcat nodes.
tcp # Create a TCP tunnel.
udp # Create a UDP tunnel.

현재 지원하는 명령어는 다음과 같은 것이 있습니다.

  • http

    HTTP 포트를 포워딩하고자 할 때 사용할 수 있습니다.

  • node

    포워딩에 사용할 mudcat 중계 서버들의 정보를 보여줍니다.

  • tcp

    TCP 포트를 포워딩하고자 할 때 사용할 수 있습니다.

  • UDP

    UDP 포트를 포워딩하고자 할 때 사용할 수 있습니다.

기본적으로 ./mudcat <command> -h 실행시 추가적으로 해당 명령어가 제공하는 도움말 정보를 더 확인하실 수 있습니다.

mudcat http 명령어

이 명령어는 HTTP 포워딩 서비스를 제공하고자 할 때 사용할 수 있습니다. 보통 내부적으로 만들고 있는 서비스를 외부에 단순히 노출하고자 할 때 사용될 수 있는 명령어 입니다.

$ ./mudcat http -h
Usage: mudcat http [options]
--domain <domain> # Specify the domain name to access.
--local-addr <ip> # Specify the local IP to connect. Default
# value is 127.0.0.1
--local-port <port> # Specify the local port. Default value is 80.
--node-cc <cc> # Specify the country code to hint the
# selection of mudcat nodes.
--node-id <nid> # Specify the unique ID of mudcat node.

지원하는 하위 옵션으로는 다음과 같은 것이 있습니다.

  • --domain <domain>

    이 옵션을 지정할 경우, 임의로 도메인 주소 (보통 숫자로 이루어진 주소) 대신 사용자가 직접 domain 을 지정할 수 있습니다. 예를 들어 --domain abc 라고 지정을 하였을 때, 할당되는 도메인 주소는 abc.mudcat.io 가 됩니다.

  • --local-addr <ip>

    이 옵션은 HTTP 포워딩하고자 로컬 주소 (IPv4)를 지정합니다. 기본값은 127.0.0.1 로 되어 있습니다.

    다만, 반드시 해당 값이 내부망 주소를 가르킬 필요는 없습니다. 만약 원격의 다른 Public IP 를 가르키고자 하신다면 해당 IP 를 지정하실 수 있습니다.

  • --local-port <port>

    HTTP 포워딩하고자 하는 로컬 포트를 지정합니다. 기본값은 80 입니다.

  • --node-cc <cc>

    사용하고자 하는 mudcat 중계 서버의 국가 코드를 지정할 수 있습니다. 예를 들어 국가 코드를 JP 로 지정한다면 일본 쪽에 있는 mudcat 중계 서버가 자동 할당되게 됩니다.

  • --node-id <nid>

    사용하고자 하는 mudcat 중계 서버의 unique ID를 지정할 수 있습니다. 각 중계 서버의 unique ID 는 mudcat node 명령어를 통해서 획득할 수 있습니다.

mudcat node 명령어

이 명령어는 mudcat 중계 서버 정보를 가져 올 때 사용합니다.

$ ./mudcat node -h
Usage: mudcat node [--json-raw]
--json-raw # Prints the raw JSON output.

./mudcat node 명령어를 사용할 경우, 현재 운영중인 mudcat 중계 서버 목록을 보실 수 있습니다. 지원하는 하위 옵션으로는 다음과 같은 것이 있습니다.

  • --json-raw

    중계 서버 목록을 JSON 포맷으로 출력을 합니다.

mudcat tcp 명령어

이 명령어는 TCP 포워딩 서비스를 제공하고자 할 때 사용할 수 있습니다.

$ ./mudcat tcp -h
Usage: mudcat tcp [options]
--conn-uuid <uuid> # Set the connection UUID to reuse.
--domain <domain> # Specify the domain name to access.
--local-addr <ip> # Specify the local IP to connect. Default
# value is 127.0.0.1
--local-port <port> # Specify the local port. If not specified,
# --remote-port value will be used.
--node-cc <cc> # Specify the country code to hint the
# selection of mudcat nodes.
--node-id <nid> # Specify the unique ID of mudcat node.
--remote-port <port> # Specify the remote port.

지원하는 하위 옵션으로는 다음과 같은 것이 있습니다.

  • --conn-uuid <uuid>

    이 옵션의 경우, 이전에 사용된 remote port 를 재사용하고자 할 때, 사용할 수 있습니다.

    보통 할당된 remote port 를 사용한 후 연결을 끊게 되면, 해당 remote port 가 리소스 해제되기 전까지 사용할 수 없게 됩니다.

    하지만 이전 Connection UUID 를 알고 있다면 해당 remote port 를 즉시 재사용할 수 있습니다.

  • --domain <domain>

    이 옵션을 지정할 경우, 임의로 도메인 주소 (보통 숫자로 이루어진 주소) 대신 사용자가 직접 domain 을 지정할 수 있습니다. 예를 들어 --domain abc 라고 지정을 하였을 때, 할당되는 도메인 주소는 abc.mudcat.io 가 됩니다.

  • --local-addr <ip>

    이 옵션은 TCP 포워딩하고자 로컬 주소 (IPv4)를 지정합니다. 기본값은 127.0.0.1 로 되어 있습니다.

    다만, 반드시 해당 값이 내부망 주소를 가르킬 필요는 없습니다. 만약 원격의 다른 Public IP 를 가르키고자 하신다면 해당 IP 를 지정하실 수 있습니다.

  • --local-port <port>

    TCP 포워딩하고자 하는 로컬 포트를 지정합니다. 만약 이 옵션이 지정되어 있지 않다면 --remote-port <port> 의 값을 포트 정보를 사용합니다.

  • --node-cc <cc>

    사용하고자 하는 mudcat 중계 서버의 국가 코드를 지정할 수 있습니다. 예를 들어 국가 코드를 JP 로 지정한다면 일본 쪽에 있는 mudcat 중계 서버가 자동 할당되게 됩니다.

  • --node-id <nid>

    사용하고자 하는 mudcat 중계 서버의 unique ID를 지정할 수 있습니다. 각 중계 서버의 unique ID 는 mudcat node 명령어를 통해서 획득할 수 있습니다.

  • --remote-port <port>

    mudcat 중계 서버에서 listening 을 할 TCP port 를 지정합니다.

mudcat udp 명령어

이 명령어는 UDP 포워딩 서비스를 제공하고자 할 때 사용할 수 있습니다.

$ ./mudcat udp -h
Usage: mudcat udp [options]
--conn-uuid <uuid> # Set the connection UUID to reuse.
--domain <domain> # Specify the domain name to access.
--local-addr <ip> # Specify the local IP to connect. Default
# value is 127.0.0.1
--local-port <port> # Specify the local port. If not specified,
# --remote-port value will be used.
--node-cc <cc> # Specify the country code to hint the
# selection of mudcat nodes.
--node-id <nid> # Specify the unique ID of mudcat node.
--remote-port <port> # Specify the remote port.

지원하는 하위 옵션으로는 다음과 같은 것이 있습니다.

  • --conn-uuid <uuid>

    이 옵션의 경우, 이전에 사용된 remote port 를 재사용하고자 할 때, 사용할 수 있습니다.

    보통 할당된 remote port 를 사용한 후 연결을 끊게 되면, 해당 remote port 가 리소스 해제되기 전까지 사용할 수 없게 됩니다.

    하지만 이전 Connection UUID 를 알고 있다면 해당 remote port 를 즉시 재사용할 수 있습니다.

  • --domain <domain>

    이 옵션을 지정할 경우, 임의로 도메인 주소 (보통 숫자로 이루어진 주소) 대신 사용자가 직접 domain 을 지정할 수 있습니다. 예를 들어 --domain abc 라고 지정을 하였을 때, 할당되는 도메인 주소는 abc.mudcat.io 가 됩니다.

  • --local-addr <ip>

    이 옵션은 UDP 포워딩하고자 로컬 주소 (IPv4)를 지정합니다. 기본값은 127.0.0.1 로 되어 있습니다.

    다만, 반드시 해당 값이 내부망 주소를 가르킬 필요는 없습니다. 만약 원격의 다른 Public IP 를 가르키고자 하신다면 해당 IP 를 지정하실 수 있습니다.

  • --local-port <port>

    UDP 포워딩하고자 하는 로컬 포트를 지정합니다. 만약 이 옵션이 지정되어 있지 않다면 --remote-port <port> 의 값을 포트 정보를 사용합니다.

  • --node-cc <cc>

    사용하고자 하는 mudcat 중계 서버의 국가 코드를 지정할 수 있습니다. 예를 들어 국가 코드를 JP 로 지정한다면 일본 쪽에 있는 mudcat 중계 서버가 자동 할당되게 됩니다.

  • --node-id <nid>

    사용하고자 하는 mudcat 중계 서버의 unique ID를 지정할 수 있습니다. 각 중계 서버의 unique ID 는 mudcat node 명령어를 통해서 획득할 수 있습니다.

  • --remote-port <port>

    mudcat 중계 서버에서 listening 을 할 UDP port 를 지정합니다.

릴리즈 노트

0.0.3 (2023-01-21)

  • 다음과 같은 옵션을 새롭게 추가하였습니다.

    • --domain
    • --node-id

0.0.2 (2023-01-20)

  • 윈도우에서 제대로 동작하지 않는 이슈를 해결함.

0.0.1 (2023-01-18)

  • 첫번째 릴리즈입니다. 기본적인 구현을 한다고 했는데, 여전히 개선점도 많고 버그도 많을 것으로 예상됩니다. 조금씩 나아져가는 모습을 보이도록 하겠습니다.