工作须要将某个具有内网IP的server的某个端口映射到某个外网IP的server的相同端口上。
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -I PREROUTING -d $outterIP -p tcp --dport $outterPort -j DNAT --to-destination $innerIP:$innerPort
iptables -I FORWARD -p tcp -m state --state NEW,RELATED,ESTABLISHED -d $innerIP --dport $innerPort -j ACCEPT
iptables -I FORWARD -p tcp -m state --state NEW,RELATED,ESTABLISHED -s $innerIP --sport $innerPort -j ACCEPT
iptables -t nat -I POSTROUTING -s $innerIP -j SNAT --to-source $outterIP
复制
前面发觉NAT映射失败,仔细检测发觉因为$outterIP并不是$innerIP的网段嵌入式linux驱动程序设计从入门到精通,从$innerIP回去的数据包直接从其网段传输走了,未能抵达$outterIP所在的server,即SNAT未能正常工作。
最后想了想linux ssh命令端口映射linux ssh命令端口映射,还是直接用sshportforwarding了,命令如下
ssh -Nfq -c arcfour -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=quiet -o ServerAliveInterval=15 -o ServerAliveCountMax=3 -L 0.0.0.0:8118:192.168.9.85:8118 -i /root/.ssh/id_rsa root@127.0.0.1
复制
效率方面恐怕会比直接NAT端口映射差一点,但我也能接受了
最后附一张iptables数据包流转图
iptables数据包流转
iptables数据包流转