端口转发 IPv4到IPv6
可以用nginx、socat、xinetd和realm。这些软件都支持IPv4和IPv4。
realm
下载对应系统和架构的二进制文件,Linux一般选realm-x86_64-unknown-linux-gnu.tar.gz
或者realm-x86_64-unknown-linux-musl.tar.gz
.
解压后放到/usr/bin/realm
。
wget https://github.com/zhboner/realm/releases/download/v2.6.3/realm-x86_64-unknown-linux-gnu.tar.gz
tar -zxf realm-x86_64-unknown-linux-gnu.tar.gz
mv realm /usr/bin/realm
chmod +x /usr/bin/realm
新建服务描述文件/etc/systemd/system/realm.service
,填入以下内容。
[Unit]
Description=A simple, high performance relay server written in rust.
After=network-online.target
Wants=network-online.target systemd-networkd-wait-online.service
[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
DynamicUser=true
ExecStart=/usr/bin/realm -c /etc/realm.toml
[Install]
WantedBy=multi-user.target
新建realm配置文件/etc/realm.toml
[log]
level = "warn"
output = "/var/log/realm.log"
[network]
no_tcp = false
use_udp = true
[[endpoints]]
listen = "0.0.0.0:5000"
remote = "1.1.1.1:443"
[[endpoints]]
listen = "0.0.0.0:10000"
remote = "www.google.com:443"
# 载入新建的服务
systemctl daemon-reload
# 启动服务
systemctl start realm
# 启动服务
systemctl status realm
# 停止服务
systemctl stop realm
# 重启服务
systemctl restart realm
# 查看服务状态
sytemctl status realm
# 设置开机自启动
systemctl enable realm
# 查看出错日志
journalctl -u realm.service -b
Nginx
版本大于1.10,编译时带有--with-stream
选项。
缺点是,如果转发ssh,一段时间没有操作会自动断开。
stream {
server {
listen 12345;
proxy_connect_timeout 5s;
proxy_timeout 20s;
proxy_pass [2a04::1234]:22;
}
}
Socat
转发SSH不会断,好!
# 前台运行
socat TCP4-LISTEN:12345,fork,su=nobody,reuseaddr TCP6:[2a04::1234]:22
# 后台运行
socat TCP4-LISTEN:443,fork,su=nobody,reuseaddr TCP4:2.3.4.5:443 > /var/log/socat.log 2>&1 &
# 查看后台运行的socat程序
ps -aux | awk 'NR==1 || /socat/'
# 关闭所有socat进程
kill -9 'pidof socat'
Xinetd
各大发行版的仓库都有,直接安装。
然后在/etc/xinetd.d
新建一个配置文件,格式参考下面,文件名随意。
# 可以用井号写注释
service myportforward
{
flags = IPv6
disable = no
type = UNLISTED
socket_type = stream
protocol = tcp
user = nobody
wait = no
redirect = 2a04::1234 22 # 转发目标IP
port = 60007 # 本机监听IP
}
开启服务后查看状态。
不支持IPv4 转 IPv6的
rinetd
作者说这软件是上世界90年代写的,要改的话太难了。
参考链接
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。