Unable to connect to local server in VPN
Asked Answered
A

1

8

I have tried below code in multiple iOS, MacOS.

This is server code

void *run_server(void *thread_id) {
    int server_fd, new_socket;
    struct sockaddr_in server, client;
    int opt = 1;
    int addrlen = sizeof(server);
   
    // Creating socket file descriptor
    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
        perror("socket");
        return NULL;
    }

    // Forcefully attaching socket to the port
    if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt))) {
        perror("setsockopt");
        return NULL;
    }

    server.sin_family = AF_INET;
    server.sin_addr.s_addr = ip("10.10.10.20"); // bind IP
    server.sin_port = htons(27042);
   
    // Forcefully attaching socket to the port
    if (bind(server_fd, (struct sockaddr *)&server, sizeof(server)) < 0) {
        perror("bind");
        return NULL;
    }

    if (listen(server_fd, 3) < 0) {
        perror("listen");
        return NULL;
    }

    printf("Server is running with %u:%d\n", server.sin_addr.s_addr, htons(server.sin_port));
    while (1) {
        if ((new_socket = accept(server_fd, (struct sockaddr *)&client, (socklen_t*)&addrlen))<0) {
            perror("accept");
            return NULL;
        }
    
        printf("Client connected with %u:%d\n", client.sin_addr.s_addr, client.sin_port);
    }
}

This is client code

void scan(unsigned int ip, int port) {
    int sock = 0;
    struct sockaddr_in serv_addr;
    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        printf("\nSocket creation error\n");
        return;
    }

    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(port);
    serv_addr.sin_addr.s_addr = ip;

    printf("IP %u, port %d\n", ip, port);
    int connected = connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
    if (connected != 0) {
        char errorMsg[256];
        strerror_r(errno, errorMsg, 256);
        printf("Error %s\n", errorMsg);
    }

    if (connected < 0) {
        close(sock);
        return;
    }
}

void *run_scan(void *thread_id) {
    while (1) {
        scan(ip("10.10.10.20"), 27042);
        usleep(1000000);
    }

    return NULL;
}

And the main function

int main(int argc, const char * argv[]) {
    pthread_t thread1;
    if (pthread_create(&thread1, NULL, run_server, (void *)1)) {
        printf("Can't create thread run_server");
    }

    pthread_t thread2;
    if (pthread_create(&thread2, NULL, run_scan, (void *)2)) {
        printf("Can't create thread run_scan");
    }

    while (1) sleep(1);
    return 0;
}

Problem description: This code is working normally with local IP (DHCP assigned IP). However when I connect to VPN and bind server IP to PPP network interface IP which is 10.10.10.20 (as above example code). I could not be able to open connect to that IP. The error is "Connection timeout". Note, the other host can still be able to connect to the server with IP 10.10.10.20.

Appreciate if any knowledge sharing regarding this situation.

Andreasandree answered 22/6, 2021 at 4:34 Comment(0)
A
0

Found the answer, basically this is a restriction imposed by the Linux kernel.

More info: https://www.softether.org/4-docs/1-manual/B._Troubleshooting_and_Supplemental/11.1_Troubleshooting

Andreasandree answered 24/6, 2021 at 9:16 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.