Ubuntu使用tinyPortMapper实现IPv6-IPv4转发

Ubuntu使用tinyPortMapper实现IPv6-IPv4转发

创建时间
Jan 18, 2025 01:17 PM
编辑日期
Last updated January 18, 2025
属性
标签

0. 前言

NGNIX也能通过stream模块实现TCP/UDP转发,在需要大并发和复杂规则(如http路径匹配,域名分流)的使用情况下优先使用。但普通的端口转发可以使用如tinyPortMapper这类轻量高性能,但是缺乏复杂规则的工具实现。尽管这类工具相比较于iptables内核级的流量转发占用的资源略多,但配置简单易用。socat仅适合临时使用。
tinyPortMapper的主要优点是轻量、高效,专注TCP/UDP端口转发,适合低资源占用但又有性能要求的场景。
  • 注意,tinyPortMapper不需要启用内核级IP转发功能,如果使用iptables(MASQUERADE)或网络接口转发内核级工具那么需要启用。
#echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf #echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf #sysctl -p /etc/sysctl.conf
  • tinyPortMapper是在用户态完成流量的接收和转发
以下操作默认在root下执行,使用普通用户组需要sudo 给命令root权限。

1. 手动编译

有现成的,直接解压给执行权限就能用。
项目地址
首先在适当目录下执行git命令,并进入下载完成的文件
git clone https://github.com/wangyu-/tinyPortMapper.git cd tinyPortMapper
安装编译工具
apt install build-essential -y
该项目不需要使用cmake,直接在文件目录内执行
make
稍等片刻,目录下生成一个tinymapper 可执行文件,可能文件名有区别,在执行前用ls 命令查看文件列表进行分辨。
将文件重命名为tinyPortMappe 并令全局目录可以使用该执行文件
mv tinymapper tinyPortMappe cp tinyPortMapper /usr/local/bin/

2. 创建Systemd服务自动启用

2.1 创建配置文件

创建服务文件
nano /etc/systemd/system/tinyPortMapper.service
根据项目的选项参数添加所需要的规则,添加以下内容
[Unit] Description=TinyPortMapper IPv6 to IPv4 Forwarding After=network.target [Service] ExecStart=/usr/local/bin/tinyPortMapper -l[::]:10000 -r8.8.8.8:53 -t -u #ExecStart=/usr/local/bin/tinyPortMapper -l入口监听:10000 -r需要转发的IP:10001 -t -u #使用例子: -l <listen_ip>:<listen_port> -r <remote_ip>:<remote_port> [options] Restart=always User=nobody Group=nogroup [Install] WantedBy=multi-user.target
其中ExecStart这一项如果有多个转发规则,可以直接在后面添加,形如
-l[::]:10000 -r8.8.8.8:53 -l[::]:10001 -r1.1.1.1:53 -t -u
这样就实现IPv6的10000端口转发到8.8.8.8:53,IPv6的10001端口转发到1.1.1.1:53。同样这个工具支持IPv6-IPv6,IPv6-IPv4,IPv4-IPv6,IPv4-IPv4的转发规则。

2.2 启用服务

首先执行
# 重新加载服务配置 systemctl daemon-reload # 启用创建的服务文件 systemctl enable tinyPortMapper systemctl start tinyPortMapper
一般此时就能正常工作了。

2.1 如果发生错误

执行以下命令检查日志
systemctl status tinyPortMapper journalctl -u tinyPortMapper
检查是否监听端口
netstat -tuln | grep 10000

2.2 检查的端口是否开放

检查所使用云服务提供商面板的防火墙是否开放端口IN,TCP/UDP。
使用ufw防火墙检查是否开放端口
ufw status