准备工作

在正式进入教程之前,大家需要对路由器进行设置。
1.开启full cone,其他设备下大家查找对应的教程
ros对应的开启命令如下

/ip firewall nat
add action=endpoint-independent-nat chain=srcnat out-interface=pppoe-out1 protocol=udp

/ip firewall nat
add action=endpoint-independent-nat chain=dstnat in-interface=pppoe-out1 protocol=udp

输入完成后,在ros中,将相关命令放到伪装条目的上方,

开启后,利用nat检测工具,检测一下,就可以看到对应的结果。

接着,进入我们的路由器,新开一个端口转发。以我内网的主页服务为例
将51920转发至192.168.6.16 的80端口为例

/ip firewall nat add action=dst-nat chain=dstnat protocol=tcp dst-port=51920 to-addresses=192.168.6.16 to-ports=80

在ros中直接输入命令,即可设置完成

打开我们的pve控制台,克隆一个lxc机器。
将我们资源包中的程序核心上传至home文件夹

输入以下命令

cd /home && chmod u+x natmap && mv natmap /usr/local/bin/

然后输入

natmap -4 -s stunserver.stunprotocol.org -h qq.com -b 51920

当我们看到对应的提示后,第一个字段是我们的公网ip,第二个字段是获取到的端口号。此时,端口已经映射成功。

我这里用手机的网络简单的测试一下,可以看到,已经可以打开,证明我们的网络是可以使用相关服务的。

接着,我们来制作一个开机自启服务

touch /etc/systemd/system/natmap1.service
[Unit]
Description=NAT Mapping Service
After=network.target

[Service]
ExecStart=/usr/local/bin/natmap -4 -s stunserver.stunprotocol.org -h qq.com -b 51920
Restart=always
SyslogIdentifier=natmap

[Install]
WantedBy=multi-user.target

制作完成后,通过以下命令来启动它

sudo systemctl daemon-reload
sudo systemctl enable natmap1.service
sudo systemctl start natmap1.service

至此,我们的服务已经制作好了,但是我们也不能每次查看日志的方式,看我们的ip和端口是多少,这时候,我们通过机器人来通知我们,当ip与端口进行更换的时候,提醒我们,最新的ip和端口是多少。

这里我们采用微信机器人的方式进行通知
我们在home文件夹下,新建一个名称为natmap1-wx.sh的脚本文件,内容包含以下信息

#!/bin/bash

address=${1}

PORT=${2}

# 微信机器人Webhook URL
webhook_url="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_WEBHOOK_KEY"

# 要发送的消息内容
message="最新的地址为${1}:${2}"

# 发送通知消息
curl -H "Content-Type: application/json" -X POST -d "{\"msgtype\": \"text\", \"text\": {\"content\": \"$message\"}}" $webhook_url

创建完成后,我们赋予它可执行权限

chmod +x /home/natmap1-wx.sh

修改第一步中创建的启动文件内容为

[Unit]
Description=NAT Mapping Service
After=network.target

[Service]
ExecStart=/usr/local/bin/natmap -4 -s stunserver.stunprotocol.org -h qq.com -b 6010 -e /home/natmap1-wx.sh
Restart=always
SyslogIdentifier=natmap

[Install]
WantedBy=multi-user.target

这时候,我们重启一下机器,就可以在微信中接到相关的通知了。

以上就是简单的一个tcp端口映射,部署完成后,就不用再去管理了,机器重新拨号后,该服务也会获取到最新的ip和端口的。

接着我们来进行 udp的端口映射

接着,我们来制作一个开机自启服务

touch /etc/systemd/system/natmap2.service
[Unit]
Description=NAT Mapping Service
After=network.target

[Service]
ExecStart=/usr/local/bin/natmap -4 -u stunserver.stunprotocol.org -h qq.com -b 6023
Restart=always
SyslogIdentifier=natmap

[Install]
WantedBy=multi-user.target

制作完成后,通过以下命令来启动它

sudo systemctl daemon-reload && sudo systemctl enable natmap2.service && sudo systemctl start natmap2.service

这里我们采用微信机器人的方式进行通知
我们在home文件夹下,新建一个名称为natmap2-wx.sh的脚本文件,内容包含以下信息

#!/bin/bash

address=${1}

PORT=${2}

# 微信机器人Webhook URL
webhook_url="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_WEBHOOK_KEY"

# 要发送的消息内容
message="最新的地址为${1}:${2}"

# 发送通知消息
curl -H "Content-Type: application/json" -X POST -d "{\"msgtype\": \"text\", \"text\": {\"content\": \"$message\"}}" $webhook_url

创建完成后,我们赋予它可执行权限

chmod +x /home/natmap2-wx.sh

修改第一步中创建的启动文件内容为

[Unit]
Description=NAT Mapping Service
After=network.target

[Service]
ExecStart=/usr/local/bin/natmap -4 -s stunserver.stunprotocol.org -h qq.com -b 6023 -e /home/natmap2-wx.sh
Restart=always
SyslogIdentifier=natmap

[Install]
WantedBy=multi-user.target

制作完成后,通过以下命令来启动它

sudo systemctl daemon-reload && sudo systemctl enable natmap2.service && sudo systemctl start natmap2.service