好好爱自己!

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  会将数据包返回至 客户端
 
数据包之间有交互就是对的
 
 
posted @   立志做一个好的程序员  阅读(644)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 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使用

不断学习创作,与自己快乐相处

点击右上角即可分享
微信分享提示