Bài số 5: Thiết lập Port forwarding cho NAT Gateway

Bài này thực hiện phương án kết nối ngược với bài trên, tức là cho phép kết nối từ ngoài mạng Internet vào mạng nội bộ. Các bước thực hiện như sau:

  • Bước 1: Kiểm tra kết nối ngược từ Internet vào R3
  • Bước 2: Kết nối ứng dụng client-server từ máy host VirtualBox vào R3
  • Bước 3: Thiết lập Port forwarding trên R3 bằng iptables

Bước 1: Kiểm tra kết nối ngược từ Internet vào R3

Để tránh phải xử lý phức tạp tại Gateway kết nối Internet của máy host VirtualBox, tạm coi môi trường bên ngoài Internet là máy host VirtualBox này. Trường hợp muốn kết nối từ một trạm ngoài Internet, cần thiết lập thêm Port Forwarding trên máy Gateway kết nối Internet của máy host VirtualBox.
Chuyển kết nối Internet của R3 từ NAT sang kiểu Host-only Adapter và được gán địa chỉ 192.168.56.105. Máy host VirtualBox có địa chỉ 192.168.56.1. Kiểm tra bằng lệnh ping từ R3 sang máy host VirtualBox:

[root@R3 ~]# ifconfig eth1
eth2      Link encap:Ethernet  HWaddr 08:00:27:4D:E2:02  
          inet addr:192.168.56.105  Bcast:192.168.56.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2980 errors:0 dropped:0 overruns:0 frame:0
          TX packets:105 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:464620 (453.7 KiB)  TX bytes:6790 (6.6 KiB)

[root@R3 ~]# ping 192.168.56.1
PING 192.168.56.1 (192.168.56.1) 56(84) bytes of data.
64 bytes from 192.168.56.1: icmp_seq=1 ttl=128 time=0.614 ms
64 bytes from 192.168.56.1: icmp_seq=2 ttl=128 time=0.641 ms
64 bytes from 192.168.56.1: icmp_seq=3 ttl=128 time=0.602 ms
^C
--- 192.168.56.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2430ms
rtt min/avg/max/mdev = 0.602/0.619/0.641/0.016 ms
			 

Kiểm tra kết nối ngược lại, từ máy host VirtualBox vào R3:

C:\Users\HP>ipconfig /all

Ethernet adapter VirtualBox Host-Only Network #2:

   Connection-specific DNS Suffix  . :
   Description . . . . . . . . . . . : VirtualBox Host-Only Ethernet Adapter #2
   Physical Address. . . . . . . . . : 0A-00-27-00-00-0D
   DHCP Enabled. . . . . . . . . . . : No
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : fe80::659b:1f2b:17ba:955a%13(Preferred)
   IPv4 Address. . . . . . . . . . . : 192.168.56.1(Preferred)
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . :
   DHCPv6 IAID . . . . . . . . . . . : 285868071
   DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-1B-4E-AB-07-EC-F4-BB-4F-20-42
   DNS Servers . . . . . . . . . . . : fec0:0:0:ffff::1%1
                                       fec0:0:0:ffff::2%1
                                       fec0:0:0:ffff::3%1
   NetBIOS over Tcpip. . . . . . . . : Enabled

Wireless LAN adapter Wireless Network Connection:

   Connection-specific DNS Suffix  . :
   Description . . . . . . . . . . . : Dell Wireless 1506 802.11b/g/n (2.4GHz)
   Physical Address. . . . . . . . . : 18-CF-5E-5D-17-C7
   DHCP Enabled. . . . . . . . . . . : Yes
   Autoconfiguration Enabled . . . . : Yes
   IPv4 Address. . . . . . . . . . . : 10.247.158.105(Preferred)
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Lease Obtained. . . . . . . . . . : Monday, August 29, 2016 10:13:18 PM
   Lease Expires . . . . . . . . . . : Wednesday, August 31, 2016 12:31:24 AM
   Default Gateway . . . . . . . . . : 10.247.158.131
   DHCP Server . . . . . . . . . . . : 10.247.158.131
   DNS Servers . . . . . . . . . . . : 4.4.4.4
                                       8.8.8.8
   NetBIOS over Tcpip. . . . . . . . : Enabled

C:\Users\HP>ping 192.168.56.105

Pinging 192.168.56.105 with 32 bytes of data:
Reply from 192.168.56.105: bytes=32 time<1ms TTL=64
Reply from 192.168.56.105: bytes=32 time<1ms TTL=64
Reply from 192.168.56.105: bytes=32 time<1ms TTL=64

Ping statistics for 192.168.56.105:
    Packets: Sent = 3, Received = 3, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms
Control-C
			 

Bước 2: Kết nối ứng dụng client-server từ máy host VirtualBox vào R3

Để thực hiện kịch bản kết nối ngược từ Internet vào mạng nội bộ, sử dụng lại các chương trình tcpservertcpclient trong các bài tập chương 2, trên máy R3 chạy tcpserver, trên máy host VirtualBox chạy tcpclient. Mặc định, tiến trình iptables trong Linux ngoài việc chặn tất cả các gói tin được route qua các card mạng (chain FORWARD), nó còn chặn tất cả các gói tin đi vào (chain INPUT). Cần bỏ các rule này ra để tcpclient ngoài mạng Internet có thể liên lạc với tcpserver

[root@R3 ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Cần bỏ các rule này ra để tcpclient ngoài mạng Internet có thể liên lạc với tcpserver trên router R3 tại cổng 6789:

[root@R3 ~]# iptables -D FORWARD -j REJECT --reject-with icmp-host-prohibited
[root@R3 ~]# iptables -D INPUT -j REJECT --reject-with icmp-host-prohibited
[root@R3 ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Sau khi bỏ các rule REJECT nêu trên, chạy tcpserver trên R3 và chạy tcpclient trên máy host Windows, kết quả là các chương trình đã kết nối và trao đổi thông tin thành công:

C:\Users\HP> java tcpclient 192.168.56.105 6789
Connecting to TCP Server at: [192.168.56.105:6789]
Server connected. Local client port: 40776
Enter a sentence to send to server: test from windows machine
Received from server: TEST FROM WINDOWS MACHINE

Kết quả chạy tcpserver trên R3:

[root@R3 ~]# java tcpserver 6789
TCP Server is listening for client connect at port: 6789
- Got client connect from: 192.168.56.1:40776
- Received from client: test from windows machine
- Send to client: TEST FROM WINDOWS MACHINE
- Finish working with client.

Bước 3: Thiết lập Port forwarding trên R3 bằng iptables

Như vậy là client ngoài mạng Internet đã truy nhập được vào cổng 6789 của router R3. Tuy nhiên, chưa thể truy nhập đến một dịch vụ bất kỳ trong mạng nội bộ. Ví dụ, tại máy trạm trong LAN3 (có địa chỉ 192.168.2.15), chạy tcpserver ở cổng 6789. Từ client host Windows bên ngoài (có địa chỉ 192.168.56.1), chạy tcpclient và thấy rằng không thể truy nhập đến dịch vụ tcpserver trên máy 192.168.2.15. Để có thể truy nhập từ ngoài vào trong, cần thiết lập port forwarding trên router R3:

[root@R3 ~]# iptables -t nat -A  PREROUTING -i eth2 -p tcp --dport 6789 -j DNAT --to-destination 192.168.2.15:6789

Sau lệnh này, tcpclient trên máy Windows khi kết nối với địa chỉ mặt ngoài của R3 (là 192.168.56.105) đã có thể liên lạc với tcpserver tại máy trạm của LAN3 (có địa chỉ 192.168.2.15):

C:\Users\HP> java tcpclient 192.168.56.105 6789
Connecting to TCP Server at: [192.168.56.105:6789]
Server connected. Local client port: 40776
Enter a sentence to send to server: test port forwarding from external host (192.168.56.1)
Received from server: TEST PORT FORWARDING FROM EXTERNAL HOST (192.168.56.1)

Sử dụng tcpdump để bắt các gói tin trên 2 card mạng của R3 (mặt ngoài và mặt trong) sẽ thấy các gói tin IP mà gửi đến cổng 6789 của card mạng mặt ngoài được forward sang card mạng mặt trong và thay đổi địa chỉ đích thành 192.168.2.15: