iptables udp 转发


package main
import (
"fmt"
"net"
)
func main() {
// 创建连接
socket, err := net.DialUDP("udp4", nil, &net.UDPAddr{
IP: net.IPv4(10, 16, 0, 194),
Port: 27001,
})
if err != nil {
fmt.Println("连接失败!", err)
return
}
defer socket.Close()
// 发送数据
senddata := []byte("hello server789ss2!")
_, err = socket.Write(senddata)
if err != nil {
fmt.Println("发送数据失败!", err)
return
}
// 接收数据
data := make([]byte, 4096)
read, remoteAddr, err := socket.ReadFromUDP(data)
if err != nil {
fmt.Println("读取数据失败!", err)
return
}
fmt.Println(read, remoteAddr)
fmt.Printf("%s\n", data)
}
package main
import (
"fmt"
"net"
)
func main() {
// 创建监听
socket, err := net.ListenUDP("udp4", &net.UDPAddr{
IP: net.IPv4(0, 0, 0, 0),
Port: 48000,
})
if err != nil {
fmt.Println("监听失败!", err)
return
}
defer socket.Close()
for {
// 读取数据
data := make([]byte, 4096)
read, remoteAddr, err := socket.ReadFromUDP(data)
if err != nil {
fmt.Println("读取数据失败!", err)
continue
}
fmt.Println(read, remoteAddr)
fmt.Printf("%s\n\n", data)
// 发送数据
senddata := []byte("hello client!")
_, err = socket.WriteToUDP(senddata, remoteAddr)
if err != nil {
return
}
}
}
---------------------
原文: https://www.cnblogs.com/lixinliang/p/13217890.html
需求:
java 服务: 10.16.0.186:7000 (udp 端口)配置的转发机器: 外网ip(1.2.3.4) 内网ip(10.16.0.95) udp端口: 27001iptables 开启转发功能:echo 1 >/proc/sys/net/ipv4/ip_forwardsysctl -piptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -t nat -A PREROUTING -p udp -m udp --dport 27001 -j DNAT --to-destination 10.16.0.186:7000iptables -t nat -A POSTROUTING -d 10.16.0.186 -p udp -m udp --dport 7000 -j SNAT --to-source 10.16.0.95用 tcpdump udp port 27001 -n 抓包发现:10.16.0.186 会将数据包返回至 10.16.0.9510.16.0.95 会将数据包返回至 客户端数据包之间有交互就是对的

浙公网安备 33010602011771号