Сервер в Go не слушает на tun0 - PullRequest
0 голосов
/ 15 марта 2020

Я использую простой стандартный Go TCP-сервер и хочу связать его с моим интерфейсом tun0.

Сервер:

func main() {
    conn, err := net.Listen("tcp", "10.1.0.21:4444")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer conn.Close()

    fmt.Println("Running on 10.1.0.21:4444")
    c, err := conn.Accept()
    if err != nil {
        fmt.Println(err)
        return
    }

    for {
        data, err := bufio.NewReader(c).ReadString('\n')
        if err != nil {
            fmt.Println(err)
            return
        }

        fmt.Print("Got ", data)
        myTime := "Hello"
        c.Write([]byte(myTime))
    }
}

As root , чтобы создать tun0, я запускаю:

ip tuntap add mode tun dev tun0
ip addr add 10.1.0.20/24 dev tun0
ip link set dev tun0 up

При прослушивании 10.1.0.21 сервер не может работать:

listen tcp 10.1.0.21:4444: bind: не может назначить запрошенный адрес

Может прослушивать 10.1.0.20, но Wireshark (как root) не перехватывает ни один пакет на tun0, пока я использую netcat (nc) для отправки пакетов на него, и сервер успешно отвечает.

Почему он не может привязаться к 10.1.0.21? Почему Wireshark не может перехватить трафик c, когда он прослушивает 10.1.0.20?

1 Ответ

0 голосов
/ 19 апреля 2020

Убедитесь, что выбран интерфейс обратной связи для захвата этого трафика c, так как трафик c является локальным. См. Также: https://www.naturalborncoder.com/virtualization/2014/10/17/understanding-tun-tap-interfaces/

И ваш другой вопрос относительно привязки к 10.1.0.21 был дан ответ в комментариях выше.

...