iptables udp 转发
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | 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) } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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端口: 27001
iptables 开启转发功能:
echo 1 >/proc/sys/net/ipv4/ip_forward
sysctl -p
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A PREROUTING -p udp -m udp --dport 27001 -j DNAT --to-destination 10.16.0.186:7000
iptables -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.95
10.16.0.95 会将数据包返回至 客户端
数据包之间有交互就是对的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2017-02-16 文件的修改时间
2017-02-16 sshd登录攻击
2017-02-16 tcp三次握手和syn 洪水攻击
2017-02-16 vim使用