진흙고양이 (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)
- 윈도우에서 제대로 동작하지 않는 이슈를 해결함.