当前位置:  首页  >  服务器技术  >  Linux/unix  >  Linux系统

利用PHP和Linuxshell在Ubuntu服务器实现自动端口转发

前言:在用动态ip分配协议的网络环境下远程控制自己的主机最烦的就是ip会经常改变,而安装teamviewer这些软件又没有用rdp那么快速,所以经常开机后第一件事就是把ip地址记下来,然后再从其他机器远程进来。因为手头掌控着一台有固定ip地址的服务器,我想能不能通过这台服务器自动记录自己机器每次获得在ip,然后可以很方便地进行远程控制,只要机器是开着的。以前是在机器上写脚本在开机的时候上传i

前言:

在用动态ip分配协议的网络环境下远程控制自己的主机最烦的就是ip会经常改变,而安装teamviewer这些软件又没有用rdp那么快速,所以经常开机后第一件事就是把ip地址记下来,然后再从其他机器远程进来。因为手头掌控着一台有固定ip地址的服务器,我想能不能通过这台服务器自动记录自己机器每次获得在ip,然后可以很方便地进行远程控制,只要机器是开着的。以前是在机器上写脚本在开机的时候上传ip地址到服务器的php网页,然后网页把ip存放在一个html文件里,要远程时再查看这个html文件来获取地址。最近我想能不能有更直接的方法,就是当自己机器把ip地址上传到服务器的时候,服务器就增加一条端口转发记录到iptables里,然后就可以通过服务器某个固定的端口来远程机器,这样子只要记住每台机器对应的端口就可以了。

网络结构:

具有固定ip地址的服务器一台,系统是Ubuntu,以及同一局域网内通过dhcp获取地址的机器一台,系统为win7.

服务器端脚本

./iptables/iptables.sh:

#!/bin/bash
#This program will receive ipaddress and port and add to iptables
#receive to data: iptables.sh hostname destination
#hostname:name of the host
#destination: ipaddress,can add port at the end
#example:
#iptables.sh ddwrt 1.2.3.4:22
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

#get hostname and destination
host=$1 #hostname of client
dest=$2 #ip of client

#add the new ip address to table.txt
awk '{if($1=="'$host'")$3="'$dest'";print $0}' table.txt > __tmp__
mv  ./iptables/__tmp__ ./iptables/table.txt

#scan table.txt and add the port to iptables
sudo iptables -t nat -F
while read line
do
 port=`echo $line | awk '{print $2}'`
 dest=`echo $line | awk '{print $3}'`
 ip=`echo $dest|cut -d":" -f1`
if [ "$port" != "port" ]; then
  sudo iptables -t nat -A PREROUTING -d 172.18.180.103 -p tcp -m tcp --dport $port -j DNAT --to-destination $dest
  sudo iptables -t nat -A POSTROUTING -p tcp -m tcp -d $ip -j SNAT --to-source 172.18.180.103
fi
done < ./iptables/table.txtdone < ./iptables/table.txt

在以上代码中,通过命令行参数传进两个参数,机器名字host和目的地址dest,其中host只是个代号,写在一个名字叫table.txt的文件中(下面会给出),而dest包括机器的ip地址和端口,如脚本说明里面的例子:

ddwrt是主机的名字,1.2.3.4:22就是目的地址了,这里是为一台ddwrt路由器做端口转发,以便通过22端口进行ssh。

赋值语句中的$1和$2分别表示命令行获取的第一个和第二个参数,如

./iptables.sh ddwrt 1.2.3.4:22

这里$1就是ddwrt,$2就是1.2.3.4:22

awk和mv两句是把名字叫host的一行记录的目的地址改成新上传的地址

while语句就是扫描/iptables/table.txt把里面的主机名对应的端口和目的地址加到iptables转发表中。

推荐阅读

Ubuntu服务器构建-结合Apache搭建SVN服务器 http://www.linuxidc.com/Linux/2013-03/80500.htm

UFW防火墙禁止IP访问Ubuntu服务器 http://www.linuxidc.com/Linux/2012-10/72683.htm

Ubuntu服务器应用KVM实现虚拟化速成手册 http://www.linuxidc.com/Linux/2011-11/46468.htm

Ubuntu下shell脚本运行异常:bash和dash的区别 http://www.linuxidc.com/Linux/2013-10/91100.htm

Ubuntu 的 bash和dash的区别 http://www.linuxidc.com/Linux/2012-03/57493.htm

更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2013-10/91581.htm

吐了个 "CAO" !
扫码关注 PHP1 官方微信号
PHP1.CN | 中国最专业的PHP中文社区 | PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | PHP问答
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved PHP1.CN 第一PHP社区 版权所有