#!/bin/bash


sysctl -w net.ipv4.ip_forward=1

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT

iptables -F
iptables -t nat -F

# 把某台server上的Port映射到本机的端口上,以便使用本机的所有的IP访问。
# $1 本机的网卡
# $2 本机的内网IP
# $3 要映射到本机的端口
# $4 内网server的IP
# $5 内网service的Port
function redirectPort {

    if [ $# -eq 0 ]  || [ $# -gt 5 ]
    then
        echo "bad parameter!"
        echo -1
    else
        interface=$1
        localIp=$2
        localPort=$3
        serverIP=$4
        servicePort=$5

        iptables -t nat -A PREROUTING -i $interface -p tcp --dport $localPort -j DNAT --to $serverIP:$servicePort

        # 要让包通过FORWARD链
        iptables -A FORWARD -p tcp -d $serverIP --dport $servicePort -j ACCEPT

        # 在这一步只所以要做dnat,是因为,如果不做dnat,源IP将是一个外网的IP,不是一个合法连接了。
        # 所以这一步要将源ip改为本机内网IP,让iptable把包回到这儿。
        iptables -t nat -A POSTROUTING -d $serverIP -p tcp --dport $servicePort -j SNAT --to $localIp

    fi
}


# 把内网的某台server上的Port映射到本机的端口上,以便使用本机的内网IP访问。
# $1 本机的内网IP
# $2 要映射到本机的端口
# $3 内网server的IP
# $4 内网service的Port
function redirectPort2 {

    if [ $# -eq 0 ]  || [ $# -gt 4 ]
    then
        echo "bad parameter!"
        echo -1
    else
        localIp=$1
        localPort=$2
        serverIP=$3
        servicePort=$4


        iptables -t nat -A PREROUTING -d $localIp -p tcp --dport $localPort -j DNAT --to $serverIP:$servicePort
        #iptables -t nat -A PREROUTING -i $interface -p tcp --dport $localPort -j DNAT --to $serverIP:$servicePort

        # 要让包通过FORWARD链
        iptables -A FORWARD -p tcp -d $serverIP --dport $servicePort -j ACCEPT


        # 在这一步只所以要做dnat,是因为,如果不做dnat,源IP将是一个外网的IP,不是一个合法连接了。
        # 所以这一步要将源ip改为本机内网IP,让iptable把包回到这儿。
        iptables -t nat -A POSTROUTING -d $serverIP -p tcp --dport $servicePort -j SNAT --to $localIp

    fi
}

# redirect redis port
redirectPort eth0 192.168.174.14 6379 172.21.0.4 6379

# MySQL    10.224.8.85:3306    33306
redirectPort2 192.168.174.14 33306 10.224.8.85 3306