利用api更新域名解析ip+端口转发【2】

时间:2024-03-03 11:39:16

利用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
View Code

运行完如下图:

 

 

3、测试结果截图

看看是否能FQ:
打开:ip111.cn

ip就是cheapnat的机器,借由了47.240.64.151的3333端口进行转发

 

整个逻辑:

 

所以这个标题:利用api更新域名解析ip+端口转发就是围绕这一的步骤进行开展的

第1步,api修改name.net的域名解析(指向cheapnat上的ip)
第2步,阿里云HK机器拿到name.com 上 的dns解析记录,拿到cheapnat上的ip
第3步,阿里云HK机器给cheapnat上的ip做端口转发