Proxmox VE 默认端口在防火墙里关闭,使用端口转发临时使用
iptables -t nat -I PREROUTING -p tcp --dport 10086 -j REDIRECT --to-ports 8006
使用完成以后,把端口转发语句关闭
iptables -t nat -D PREROUTING -p tcp --dport 10086 -j REDIRECT --to-ports 8006
某段端口给给分配 某NAT小鸡使用。
iptables -t nat -A PREROUTING -p tcp -m multiport --dport 11100:11199 -j DNAT --to-destination 10.10.10.111
登陆NAT小鸡,只要执行端口转发,而不需要修改网络服务的配置文件
iptables -t nat -A PREROUTING -p tcp --dport 11188 -j REDIRECT --to-ports 80
PVE NAT 批量端口转发设置脚本,使用命令 nat.sh $(lxc-ls) 自动调用 lxc容器id
# Usage: bash nat.sh $(lxc-ls)
# 小鸡的端口转发规则 ssh 22 http 80 10<N>00 : 10<N>99
# ID对应IP 101: 10122 10180 10100 : 10199
#-------------------------------------------------------------#
input_id()
{
id=101
echo -e "测试默认ID: \033[41;37m ${id} \033[0m 可以修改设置其他ID; "
read -p "请输入NAT小鸡的ID号(按回车不修改): " -t 30 new
if [[ ! -z "${new}" ]]; then
id="${new}"
fi
nat_port
iptables -t nat -nvL PREROUTING
echo -e ":: PVE NAT 批量端口转发设置脚本: \033[41;37m bash nat.sh $(lxc-ls) \033[0m \n使用参考: https://262235.xyz/index.php/archives/714/"
}
# 以id为ip设置端口转发
nat_port()
{
iptables -t nat -I PREROUTING -p tcp -m tcp --dport ${id}22 -j DNAT --to-destination 10.10.10.${id}:22
iptables -t nat -A PREROUTING -p tcp -m multiport --dport ${id}00:${id}99 -j DNAT --to-destination 10.10.10.${id}
}
# 手工输入id,input_id调用nat端口转发
if [ $# -eq 0 ];
then
input_id
exit
fi
# 遍历参数 批量设置 nat端口转发
for arg in $*
do
id=$arg
nat_port
done
# 查看 nat PREROUTING 端口映射规则
iptables -t nat -nvL PREROUTING
# 清空 nat PREROUTING 端口映射规则
# iptables -t nat -F PREROUTING
# Usage: bash nat.sh $(lxc-ls)
使用脚本后 multiport dports 11100:11199 to:10.10.10.111
,分配100个端口给ID 111号NAT小鸡使用
登陆NAT小鸡,不需要修改Nginx配置,只需要运行
iptables
把11180转发到80端口就行iptables -t nat -A PREROUTING -p tcp --dport 11180 -j REDIRECT --to-ports 80
理解以上简单的端口转发,再来加强学习,来学习高级点的用法
iptables端口转发 由 TaterLi 2019年10月21日2019年10月26日
实际上很多人都知道端口转发,但是很多都是一键脚本,实际上也没有那么麻烦,我们很简单就能做到,重点是如何理解端口转发这个概念.
转发包含了TCP转发,UDP转发,最常用的TCP转发了吧,做堡垒机,目标服务器防火墙白名单机制之类的.
转发操作全程都在自己的机器上做就行.
转发就得打开转发功能,如果包含IPv6自己改改就行.
net.ipv4.ip_forward = 1
在转发之前,我们要先说下路由,他们的路径大致是这样的.
源地址发送数据-> {PREROUTING->路由规则->POSTROUTING} ->目的地址接收到数据
另外转发是附带SNAT作用的,所以就可以转换源地址了啊.
比如下面例子:
iptables -t nat -A PREROUTING -p tcp --dport 49022 -j DNAT --to-destination 63.223.9.40:6022
iptables -t nat -A POSTROUTING -p tcp -d 63.223.9.40 --dport 6022 -j SNAT --to-source 47.56.22.202
这样你访问47.56.22.202的49022端口,就相当于透明的访问了63.223.9.40的6022端口,这里只打通了TCP传输.
但是有一点要注意,如果你的机器是内网机器,比如说阿里云ECS什么的,47.56.22.202就应该替换为你的内网IP了,比如172.31.112.205这样的,不然是到达不了的,再由各种转发器来完成各种需求.
另外,只是转发单个端口,也太浪费了,还可以做负载均衡哦.
比如这样,就均分数据包到两台后端服务器,暴露了Web端口.
iptables -t nat -A PREROUTING -p tcp --dport 80 -m statistic --mode nth --every 2 --packet 0 -j DNAT --to-destination 199.19.104.1:8080
iptables -t nat -A PREROUTING -p tcp --dport 80 -m statistic --mode nth --every 1 --packet 0 -j DNAT --to-destination 199.19.104.2:8080
iptables -t nat -A POSTROUTING -p tcp -d 199.19.104.1 --dport 8080 -j SNAT --to-source 172.31.112.205
iptables -t nat -A POSTROUTING -p tcp -d 199.19.104.2 --dport 8080 -j SNAT --to-source 172.31.112.205
这个比较绿色环保,不用额外装软件的转发,总体来说还是不错的.