利用api更新域名解析ip+端口转发【2】
一、需求二及问题解决
1、问题引入:
ssr客户端配置FQ,连过去有时候连不上cheapnat机器;而且因为cheapnat机器是国外的,很容易被封掉,所以利用阿里云的国际版香港机器给cheapnat机器上的ip进行端口转发。(因为这些机器早就过期没有再使用了,就不打马赛克了)
阿里云的国际版香港机器:47.240.64.151
Cheapnat机器: 210.6.179.203
现在需要:47.240.64.151 3333端口 转发到 210.6.179.203 44222端口(b.ljy.xyz)
也就是210.6.179.203(ip经常变:之前那篇利用api更新域名解析ip+端口转发【1】就是处理这个问题的) 端口:44222 需要用到阿里云47.240.64.151 去做端口转发,用:3333端口,记得阿里云控制台上的防火墙也要开启3333端口
2、问题解决
这个图的ip变了= =,其实就是上面说的Cheapnat.com上的ip:210.6.179.203
(1)原服务器上有个这样的脚本: iptables-pf.sh
脚本内容自己从这里下载:https://www.vjsun.com/237.html
界面如下:
我的脚本是参考上面iptables-pf.sh脚本写的:
1、思路:
(1) 利用api获取cheapnat上ip(210.6.179.203)
cheapnat上ip有变,执行(2),清空iptables端口转发;否则退出脚本
(2) 根据行号删除原有iptables规则转发,并添加新ip的转发规则
(3) 最后把ip写到HKBNip,作为下次执行脚本时cheapnat上的旧ip
附上我的脚本:
1 #!/usr/bin/env bash 2 3 DATE=$(date +%F_%T) 4 LOG=/root/port_forward.log 5 6 echo "$DATE 开始运行脚本HKBNport_forward.sh" >> $LOG 7 IPTABLES=/sbin/iptables 8 9 #1、利用api获取远程ip 10 msg=`curl -u \'namecom的用户登录名:上面截图的生产令牌\' \'https://api.name.com/v4/domains/b.ljy.xyz/records/1873892959\'` 11 forwarding_ip=`echo $msg |awk -F\'[",]\' \'{print $27}\'` 12 forwarding_port=44222 13 14 local_port=3333 15 local_ip=172.17.62.239 #本机内网ip 16 17 oldip=`cat HKBNip` 18 echo $oldip 19 20 if [[ $oldip == $forwarding_ip ]]; then 21 echo \'the same ip\' 22 exit 0 23 fi 24 25 26 #2、删除原有tcp规则 27 #找到目标行号 28 TCP_Del_DNAT_num=`iptables -t nat -nvL --line-numbers |grep 44222 |grep DNAT | grep tcp | awk \'{print $1}\'` 29 TCP_Del_SNAT_num=`iptables -t nat -nvL --line-numbers |grep 44222 |grep SNAT | grep tcp | awk \'{print $1}\'` 30 31 if [ -n "${TCP_Del_DNAT_num}" ]; then 32 iptables -t nat -D PREROUTING ${TCP_Del_DNAT_num} 33 fi 34 if [ -n "${TCP_Del_SNAT_num}" ]; then 35 iptables -t nat -D POSTROUTING ${TCP_Del_SNAT_num} 36 fi 37 38 #删除tcp INPUT规则 39 TCP_Del_INPUT_num=`iptables -L INPUT --line-numbers |grep 3333 | grep tcp | awk \'{print $1}\'` 40 if [ -n "${TCP_Del_INPUT_num}" ]; then 41 iptables -D INPUT ${TCP_Del_INPUT_num} 42 fi 43 44 #删除原有udp规则 45 UDP_Del_DNAT_num=`iptables -t nat -nvL --line-numbers |grep 44222 |grep DNAT | grep udp | awk \'{print $1}\'` 46 UDP_Del_SNAT_num=`iptables -t nat -nvL --line-numbers |grep 44222 |grep SNAT | grep udp | awk \'{print $1}\'` 47 48 if [ -n "${UDP_Del_DNAT_num}" ]; then 49 iptables -t nat -D PREROUTING ${UDP_Del_DNAT_num} 50 fi 51 52 if [ -n "${UDP_Del_SNAT_num}" ]; then 53 iptables -t nat -D POSTROUTING ${UDP_Del_SNAT_num} 54 fi 55 56 #删除udp INPUT规则 57 UDP_Del_INPUT_num=`iptables -L INPUT --line-numbers |grep 3333 | grep udp | awk \'{print $1}\'` 58 if [ -n "${UDP_Del_INPUT_num}" ]; then 59 iptables -D INPUT ${UDP_Del_INPUT_num} 60 fi 61 62 #3、删除新转发规则 63 ## add tcp 64 $IPTABLES -t nat -A PREROUTING -p tcp --dport "${local_port}" -j DNAT --to-destination "${forwarding_ip}":"${forwarding_port}" 65 66 $IPTABLES -t nat -A POSTROUTING -p tcp -d "${forwarding_ip}" --dport "${forwarding_port}" -j SNAT --to-source "${local_ip}" 67 68 $IPTABLES -I INPUT -m state --state NEW -m tcp -p tcp --dport "${local_port}" -j ACCEPT 69 70 71 ## add udp 72 $IPTABLES -t nat -A PREROUTING -p udp --dport "${local_port}" -j DNAT --to-destination "${forwarding_ip}":"${forwarding_port}" 73 $IPTABLES -t nat -A POSTROUTING -p udp -d "${forwarding_ip}" --dport "${forwarding_port}" -j SNAT --to-source "${local_ip}" 74 $IPTABLES -I INPUT -m state --state NEW -m udp -p udp --dport "${local_port}" -j ACCEPT 75 76 77 ##写到HKBNip,作为下次脚本用 78 echo $forwarding_ip > HKBNip
运行完如下图:
3、测试结果截图
所以这个标题:利用api更新域名解析ip+端口转发就是围绕这一的步骤进行开展的