配置文件/iptables/table.txt:
name port destination
zebra 2001 172.18.217.192:3389
connatation 2002 172.18.217.3:3389
ddwrt 2004 8.2.3.4:22
raspberry_pi 2005 172.18.214.5:22
上图中就是用文本作为脚本的配置文件,该文件必须存在,否则脚本运行会有问题
访文件分三个字段,第一行是每个字段的说明,分别表示机器名字,机器在服务器上对应的端口,机器的ip地址和要转发到的端口
下面四行就是四条记录,其中名字为zebra和connatation的两机器是win7,转发到3389进行远程桌面,另外两台机器分别是路由器和树莓派,转发到22进行ssh。
服务器商php脚本./test_shell.php:
<?
//file:test_shell.php
//author:XieShundao
//date:2013.10.17
//descript:excute shell with user in root previlage,
// make port transport from the server to dynamic ip client.
// need the follow data in get methord:
// dest: ip address of the client,can include port in the end
// host: hostname of the client
//example: ?dest=172.18.217.182:22&host=ddwrt
//ref:
//add port transport to iptables
//$cmd="sudo iptables -t nat -A PREROUTING -d 222.200.180.103 -p tcp -m tcp --dport ".$_GET["port"]." -j DNAT --to-destination ".$_GET["ip"].":3389";
$cmd="/usr/bin/sudo /var/www/iptables/iptables.sh ".$_GET["host"]." ".$_GET["dest"];
echo $cmd;
//excute the command
exec($cmd,$output,$return);
?>
这里说明一个文件结构,该文件是放在/var/www文件夹即Ubuntu默认的网站根目录下,而前面的table.txt和iptables.sh是放在该文件来下一个叫做iptables的文件夹下,并且在php里用root权限运行脚本,参考了:
然后在各个机器下写脚本程序通过get方式把自己的ip和机器名字上传上来就可以了。不过有一点要注意:如果有使上传的ip写进iptables里,该机器名字必须要在table.txt里。
上传的格式为:
?dest=172.18.3.4:22&host=ddwrt
其中your_server为你服务器的ip或域名
对照table.txt可知ddwrt对应的端口为2004,所以以后要ssh该机器可以直接通过ssh你服务器的2004端口进行操作。