danderson / netboot

Packages and utilities for network booting
Apache License 2.0
1.48k stars 181 forks source link

TFTP bug: response source IP is not client request #122

Open qin-nz opened 3 years ago

qin-nz commented 3 years ago

Hi, My machine has two IPs, one on loopback interface and another on an ethernet interface. I hope client can use loopback address as tftp server address.

My IP is:

lo: 192.0.2.255/32
xgbe0: 192.0.2.1/31

tftpd is listened on 0.0.0.0 using s.ListenAndServe(":69")

If client request 192.0.2.255, server will got following err

"client-ip:port": sending data packet 1: read udp 192.0.2.1:port->client-ip:port: read: connection refused

Please notes source of response packet use xgbe0's IP as source.

If client request 192.0.2.1, it's ok.


If listened on loopback, using s.ListenAndServe("192.0.2.255:69"), and client request 192.0.2.255. It still use xgbe0's ip to response.

qin-nz commented 3 years ago

This can be fixed by update Linux kernel routing table, using following command

ip route add [client-subnet] via [gateway] dev xgbe0 src 192.0.2.255

But I think this is still a bug, and xinetd tftp can handle it correctly.