天天看點

Iptables 之NAT端口轉發設定

背景:

伺服器A:103.110.114.8/192.168.1.8,有外網ip,是IDC的一台伺服器

伺服器B:192.168.1.150,沒有外網ip,A伺服器是它的主控端,能互相ping通

伺服器C:192.168.9.120,是公司的一台伺服器,能上網。

伺服器C可以直接ssh登陸A伺服器,但是不能直接登陸伺服器B,因為它們處在兩個不同的區域網路内。

現在要求能從伺服器C上ssh登陸伺服器B,并且做ssh無密碼信任跳轉關系。

這就需要用到iptables的NAT端口轉發功能了~~~~~

思路:

讓伺服器C先通路伺服器A上的20022端口,然後NAT轉發到伺服器B的ssh端口(22端口)

----------------------------------------------------------------------------------------------

下面是在主控端A上(192.168.1.8)的操作:

1)先開啟ip路由轉發功能

[root@linux-node1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

或者

[root@linux-node1 ~]# cat /etc/sysctl.conf

..........

net.ipv4.ip_forward = 1

[root@linux-node1 ~]# sysctl -p

2)設定iptables的NAT轉發功能

[root@linux-node1 ~]# iptables -t nat -A PREROUTING -p tcp -m tcp --dport 20022 -j DNAT --to-destination 192.168.1.150:22

[root@linux-node1 ~]# iptables -t nat -A POSTROUTING -d 192.168.1.150/32 -p tcp -m tcp --sport 22 -j SNAT --to-source 192.168.1.8

[root@linux-node1 ~]# iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 20022 -j ACCEPT

[root@linux-node1 ~]# service iptables save

[root@linux-node1 ~]# service iptables restart

nat端口轉發設定成功後,/etc/sysconfig/iptables檔案裡要注釋掉下面兩行!不然nat轉發會有問題!一般如上面在nat轉發規則設定好并save和restart防火牆之後就會自動在/etc/sysconfig/iptables檔案裡删除掉下面兩行内容了。

[root@linux-node1 ~]# vim /etc/sysconfig/iptables

#-A INPUT -j REJECT --reject-with icmp-host-prohibited         //這兩行最好是注釋掉。在一般的白名單設定中,如果這兩行不注釋,也會造成iptables對端口的設定無效

#-A FORWARD -j REJECT --reject-with icmp-host-prohibited

下面是在伺服器B上(192.168.1.150)的操作:

1)首先關閉防火牆

[root@dev-new-test1 ~]# service iptables stop

2)設定網關為主控端的内網ip(内網網關位址一定要保持和主控端内網網關位址一緻!如果沒有内網網關位址,那麼就把它的網關設定成主控端的内網ip位址!)

[root@dev-new-test1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0

......

GATEWAY=192.168.1.8

[root@dev-new-test1 ~]# /etc/init.d/network restart

[root@dev-new-test1 ~]# route -n

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0

0.0.0.0 192.168.1.8 0.0.0.0 UG 0 0 0 eth0

最後在公司伺服器C上測試:看看能否登陸到虛拟機上

[root@redmine ~]# ssh -p20022 103.110.114.8

The authenticity of host '[103.10.86.8]:20022 ([103.10.86.8]:20022)' can't be established.

RSA key fingerprint is f8:a9:d1:cb:52:e8:8b:ed:8b:d2:1a:86:06:1a:fd:0f.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '[103.10.86.8]:20022' (RSA) to the list of known hosts.

[email protected]'s password:

[root@dev-new-test1 ~]# ifconfig                          #檢視,已經成功登陸進來了!

eth0 Link encap:Ethernet HWaddr FA:16:3E:9D:F3:17

inet addr:192.168.1.150 Bcast:192.168.1.255 Mask:255.255.255.0

inet6 addr: fe80::f816:3eff:fe9d:f317/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:27047404 errors:0 dropped:0 overruns:0 frame:0

TX packets:6401069 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:67605283704 (62.9 GiB) TX bytes:566935277 (540.6 MiB)

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING MTU:65536 Metric:1

RX packets:87025 errors:0 dropped:0 overruns:0 frame:0

TX packets:87025 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:65978795 (62.9 MiB) TX bytes:65978795 (62.9 MiB)

可以把伺服器C的公鑰id_rsa.pub内容拷貝到虛拟機上的authorized_keys檔案内,這樣從C機器就能ssh無密碼登陸到虛拟機B上了。

--------------------------------------------------------------------

下面貼出幾個其他轉口的轉發規則(本機開啟ip路由轉發,目标機器注意防火牆和網關設定):

本機(192.168.1.7)的19200轉發到192.168.1.160的9200

[root@kvm-server conf]# iptables -t nat -A PREROUTING -p tcp -m tcp --dport 19200 -j DNAT --to-destination 192.168.1.160:9200

[root@kvm-server conf]# iptables -t nat -A POSTROUTING -d 192.168.1.160/32 -p tcp -m tcp --sport 9200 -j SNAT --to-source 192.168.1.7

[root@kvm-server conf]# iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 19200 -j ACCEPT

本機(192.168.1.7)的33066轉發到192.168.1.160的3306

[root@kvm-server conf]# iptables -t nat -A PREROUTING -p tcp -m tcp --dport 33066 -j DNAT --to-destination 192.168.1.160:3306

[root@kvm-server conf]# iptables -t nat -A POSTROUTING -d 192.168.1.160/32 -p tcp -m tcp --sport 3306 -j SNAT --to-source 192.168.1.7

[root@kvm-server conf]# iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 33066 -j ACCEPT

本機(192.168.1.7)的8880轉發到192.168.1.1的8080

[root@kvm-server conf]# iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8880 -j DNAT --to-destination 192.168.1.160:8080

[root@kvm-server conf]# iptables -t nat -A POSTROUTING -d 192.168.1.160/32 -p tcp -m tcp --sport 8080 -j SNAT --to-source 192.168.1.7

[root@kvm-server conf]# iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 8880 -j ACCEPT

*************** 當你發現自己的才華撐不起野心時,就請安靜下來學習吧!***************