From da8958f848767d1b2c951e4579a55924060744b9 Mon Sep 17 00:00:00 2001 From: Andrew Aladjev Date: Mon, 22 Apr 2024 02:38:01 +0300 Subject: [PATCH 1/5] enabled IPV6_V6ONLY option for tcp IPv6 bind logic, net.ipv6.bindv6only 0 is supported now --- network.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/network.c b/network.c index 2c0f2c1..43453a8 100644 --- a/network.c +++ b/network.c @@ -198,6 +198,11 @@ int *tcp_listener(const char *s) if ((fd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol)) < 0) continue; /* ignore */ opt = 1; + if (ai->ai_family == AF_INET6) { + /* we are going to bind to IPv6 address only */ + if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &opt, sizeof(opt)) < 0) + err_sys("setsockopt(IPPROTO_IPV6, IPV6_V6ONLY)"); + } if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) < 0) err_sys("setsockopt(SOL_SOCKET, SO_REUSEADDR)"); if (bind(fd, (struct sockaddr *) ai->ai_addr, ai->ai_addrlen) < 0) From 94d5ea223860c765e255569b8c6a615080b155c0 Mon Sep 17 00:00:00 2001 From: Andrew Aladjev Date: Mon, 22 Apr 2024 09:46:33 +0300 Subject: [PATCH 2/5] Omar Tariq (aka OmarTariq612): using send() instead of sendto() chaning sendto() function call into send() as it's being used on a tcp socket. "If sendto() is used on a connection-mode (SOCK_STREAM, SOCK_SEQPACKET) socket, the arguments dest_addr and addrlen are ignored (and the error EISCONN may be returned when they are not NULL and 0)" from Linux Programmer's Manual. --- udptunnel.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/udptunnel.c b/udptunnel.c index 8dd9c17..f5b6b5b 100644 --- a/udptunnel.c +++ b/udptunnel.c @@ -379,9 +379,7 @@ static void tcp_to_udp(struct relay *relay) static void send_handshake(struct relay *relay) { - if (sendto(relay->tcp_sock, relay->handshake, sizeof(relay->handshake), 0, - (struct sockaddr *) &relay->remote_udpaddr, - sizeof(relay->remote_udpaddr)) < 0) + if (send(relay->tcp_sock, relay->handshake, sizeof(relay->handshake), 0) < 0) err_sys("sendto(tcp, handshake)"); } From 883e04a8330a6edbce21e078e26eba5cc7bf65a0 Mon Sep 17 00:00:00 2001 From: Andrew Aladjev Date: Mon, 22 Apr 2024 10:41:56 +0300 Subject: [PATCH 3/5] added cmake build systems and cpack for creating deb and rpm packages --- .gitignore | 1 + CMakeLists.txt | 34 ++++++++++++++++++++++++++++++++++ CPackConfig.cmake | 28 ++++++++++++++++++++++++++++ README.md | 17 +++++++++++++++++ 4 files changed, 80 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 CPackConfig.cmake create mode 100644 README.md diff --git a/.gitignore b/.gitignore index a58f699..ee8288b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +cmake-build *.o Makefile.depend udptunnel diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..c0bca03 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,34 @@ +cmake_minimum_required (VERSION 3.10) +project ("udptunnel" "C") + +if (PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR) + message (FATAL_ERROR "In-source builds are not allowed") +endif () + +set (CMAKE_PROJECT_DESCRIPTION "UDP tunnel over TCP") +set (CMAKE_PROJECT_HOMEPAGE_URL "https://github.com/andrew-aladjev/udptunnel") +set (PROJECT_VERSION "1.2.0") + +if (NOT DEFINED CMAKE_INSTALL_BINDIR) + set (CMAKE_INSTALL_BINDIR "sbin" CACHE PATH "output directory for binaries") +endif () + +set (CMAKE_C_FLAGS "-O2 -std=c11 -Wall") + +if (NOT DEFINED CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL "") + set (CMAKE_BUILD_TYPE "Release") +endif () + +set ( + SOURCES + "log.c" + "network.c" + "udptunnel.c" + "utils.c" +) + +add_executable (${PROJECT_NAME} ${SOURCES}) +install (TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) + +include (CPackConfig.cmake) +include (CPack) diff --git a/CPackConfig.cmake b/CPackConfig.cmake new file mode 100644 index 0000000..b3b2809 --- /dev/null +++ b/CPackConfig.cmake @@ -0,0 +1,28 @@ +set (CPACK_PACKAGE_NAME ${PROJECT_NAME}) +set (CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) +set (CPACK_RESOURCE_FILE_README "${PROJECT_SOURCE_DIR}/README.md") +set (CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/COPYING") + +set (CPACK_PACKAGE_LICENSE "LGPLv2") +set (CPACK_RPM_PACKAGE_LICENSE ${CPACK_PACKAGE_LICENSE}) +set (CPACK_FREEBSD_PACKAGE_LICENSE ${CPACK_PACKAGE_LICENSE}) + +set (CPACK_PACKAGE_MAINTAINER "Andrew Aladjev ") +set (CPACK_DEBIAN_PACKAGE_MAINTAINER ${CPACK_PACKAGE_MAINTAINER}) +set (CPACK_FREEBSD_PACKAGE_MAINTAINER ${CPACK_PACKAGE_MAINTAINER}) + +set (CPACK_FREEBSD_PACKAGE_ORIGIN "net/${PROJECT_NAME}") + +set (CPACK_PACKAGE_ARCHITECTURE "amd64") +set (CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${CPACK_PACKAGE_ARCHITECTURE}) +set (CPACK_RPM_PACKAGE_ARCHITECTURE ${CPACK_PACKAGE_ARCHITECTURE}) + +if (CMAKE_SYSTEM_NAME MATCHES "Linux") + set (CPACK_GENERATOR "DEB" "RPM") +elseif (CMAKE_SYSTEM_NAME MATCHES "FreeBSD") + set (CPACK_GENERATOR "FREEBSD") +endif () + +set (PACKAGE_NAME "${CPACK_PACKAGE_NAME}") +set (CPACK_PACKAGE_FILE_NAME "${PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}.${CPACK_PACKAGE_ARCHITECTURE}") +set (CPACK_STRIP_FILES true) diff --git a/README.md b/README.md new file mode 100644 index 0000000..aaf7c1d --- /dev/null +++ b/README.md @@ -0,0 +1,17 @@ +UDP tunnel over TCP. License: LGPLv2. + +Please build it using the following commands: + +```bash +rm -rf cmake-build +cmake -S . -B cmake-build +cmake --build cmake-build +cmake --build cmake-build --target package +``` + +After that you will receive packages for DEB-based and RPM-based distros: + +``` +cmake-build/udptunnel-*.amd64.deb +cmake-build/udptunnel-*.amd64.rpm +``` From 8206697656861233490863fad330e949d02fdb4b Mon Sep 17 00:00:00 2001 From: Andrew Aladjev Date: Mon, 22 Apr 2024 12:35:09 +0300 Subject: [PATCH 4/5] provided static executable, updated debian package category to net --- CMakeLists.txt | 1 + CPackConfig.cmake | 1 + 2 files changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index c0bca03..55b8ae9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,7 @@ if (NOT DEFINED CMAKE_INSTALL_BINDIR) endif () set (CMAKE_C_FLAGS "-O2 -std=c11 -Wall") +set (CMAKE_EXE_LINKER_FLAGS "-static") if (NOT DEFINED CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL "") set (CMAKE_BUILD_TYPE "Release") diff --git a/CPackConfig.cmake b/CPackConfig.cmake index b3b2809..270cf19 100644 --- a/CPackConfig.cmake +++ b/CPackConfig.cmake @@ -11,6 +11,7 @@ set (CPACK_PACKAGE_MAINTAINER "Andrew Aladjev ") set (CPACK_DEBIAN_PACKAGE_MAINTAINER ${CPACK_PACKAGE_MAINTAINER}) set (CPACK_FREEBSD_PACKAGE_MAINTAINER ${CPACK_PACKAGE_MAINTAINER}) +set (CPACK_DEBIAN_PACKAGE_SECTION "net") set (CPACK_FREEBSD_PACKAGE_ORIGIN "net/${PROJECT_NAME}") set (CPACK_PACKAGE_ARCHITECTURE "amd64") From 81520aa6406a95ed3b8a75f65fc5c4a3f1f81a20 Mon Sep 17 00:00:00 2001 From: Andrew Aladjev Date: Mon, 22 Apr 2024 12:37:55 +0300 Subject: [PATCH 5/5] bumped version to 1.2.1 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 55b8ae9..3b13a73 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ endif () set (CMAKE_PROJECT_DESCRIPTION "UDP tunnel over TCP") set (CMAKE_PROJECT_HOMEPAGE_URL "https://github.com/andrew-aladjev/udptunnel") -set (PROJECT_VERSION "1.2.0") +set (PROJECT_VERSION "1.2.1") if (NOT DEFINED CMAKE_INSTALL_BINDIR) set (CMAKE_INSTALL_BINDIR "sbin" CACHE PATH "output directory for binaries")