概述
由于某些原因,需要实现一个海外VM的源地址限制访问,因此,在国内也租一台VM,然后配置正向代理方式,同时在海外VM配置源地址限制。
在linux中,转发的报文流向是:PREROUTING --> FORWARD --> POSTROUTING,所以这里需要配置PREROUTING和POSTROUTING两个链。
国内VM配置方式
# PREROUTING 这个链配置的是公网数据包发给这台VM后的处理方式(即主动访问这台VM)
# -t nat 是指用nat功能,-A是添加一条记录,--dport外部访问本地6111端口
# -j指定规则的目标
# DNAT 进行源地址转换(即重写包的目的地址,本来数据包的目的地址是这台国内VM,需要改为海外VM)
# --to-destination 指目标发往哪里
#
# 整段命令的意思是:将所有发给本地23333端口的tcp报文,转发到海外IP(1.2.3.4)和端口23333
iptables -t nat -A PREROUTING -p tcp --dport 23333 -j DNAT --to-destination 1.2.3.4:23333
# POSTROUTING 这个链配置的是公网数据包发给这台VM后的处理方式
# 整段命令的意思是:针对来自1.2.3.4:23333的数据包,回本机网卡
# 这里需要通过ifconfig查询网卡的物理IP,因为一般VM都会有VPC虚拟局域网,并通过EIP映射至公网,所以这里需要配置为本地IP(通常为172开头)
iptables -t nat -A POSTROUTING -p tcp -d 1.2.3.4 --dport 23333 -j SNAT --to-source 172.1.2.3
# 下面两个命令是针对udp数据包进行同样的配置
iptables -t nat -A PREROUTING -p udp --dport 23333 -j DNAT --to-destination 1.2.3.4:23333
iptables -t nat -A POSTROUTING -p udp -d 1.2.3.4 --dport 23333 -j SNAT --to-source 172.1.2.3
海外VM配置方式
# 这里4.3.2.1是国内VM的公网IP地址,表示接收来自4.3.2.1的任意端口的请求
iptables -I INPUT -s 4.3.2.1 -j ACCEPT
# 这里讲22端口的tcp访问方式永远开放,用来从本地发起ssh
iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT
# 接下来丢弃所有报文,注意这里第三行必须晚于第二行写入,删除时必须先删除第三行,不然就变砖了
iptables -I INPUT 3 -j DROP