【发布时间】:2020-03-15 10:27:27
【问题描述】:
我正在运行一个简单的标准 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))
}
}
以 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时,服务器无法运行:
监听 tcp 10.1.0.21:4444:绑定:无法分配请求的地址
它可以监听10.1.0.20,但是Wireshark(以root身份)不会拦截tun0上的任何数据包,而我正在使用netcat(nc)向它发送数据包并且服务器成功响应。
为什么不能绑定到10.1.0.21?为什么Wireshark监听10.1.0.20时不能拦截任何流量?
【问题讨论】:
-
你检查过设备文件的权限吗?
-
@MarkusWMahlberg 我如何检查它们?我以 root 身份运行该程序,但我仍会仔细检查。我正在使用它来调试 my other question,两者都在 Ubuntu 上
-
您分配了 .21 而不是 .20。您必须运行
ip addr add 10.1.0.21/24 dev tun0才能使其可用。 -
@Peter “您分配了 .21 而不是 .20。您必须运行 ip addr add 10.1.0.21/24 dev tun0 才能使其可用。”
10.1.0.21/24和10.1.0.20/24不一样吗? -
一点也不。一个在子网中分配 0.20,另一个在同一子网中分配 0.21。如果这是您所期望的,它会不分配子网中的所有地址。它只是
addr add 10.1.0.20 netmask 255.255.255.0的缩写(或类似的东西;我忘记了确切的命令)。