Linux

使用 iptables 規則對 ssh 伺服器進行外部訪問

  • August 19, 2018

我有一個執行DD-WRT的路由器。在我的網路中,我有一個執行OpenSSH 伺服器的****NAS設備。我希望能夠從LAN外部訪問****OpenSSH 伺服器

這是通過向iptables添加規則來完成的

路由器已配置:

  1. OpenVPN 客戶端
  2. 動態域名解析

假設:

  • <routerIp>內部路由器IP
  • <routerPort>路由器上用於監聽傳入流量的埠
  • <nasIP>內部 NAS IP
  • <nasPort>NAS 上的 OpenSSH 伺服器埠

目前我也有<routerPort>==<nasPort>

我必須:

  1. 在路由器上打開一個埠
  2. 將進入此埠的流量路由到NAS

應該完成此任務但不起作用的規則是:

iptables -A FORWARD -i tun1 -p tcp -d <nasIP> --dport <nasPort> -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -d <routerIp> --dport <routerPort> -j DNAT --to-destination <nasIP>:<nasPort>

參考:

根據 RalfFriedl 的回答編輯:

將規則更改為:

iptables -A FORWARD -i tun1 -p tcp -d <nasIP> --dport <nasPort> -j ACCEPT
iptables -t nat -A PREROUTING -i tun1 -p tcp --dport <nasPort> -j DNAT --to-destination <nasIP>:<nasPort>

但也沒有用

如何獲取外部IP?

編輯輸出ip a

1: lo:  mtu 65536 qdisc noqueue 
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
      valid_lft forever preferred_lft forever
   inet6 ::1/128 scope host 
      valid_lft forever preferred_lft forever
2: imq0:  mtu 1500 qdisc fq_codel qlen 30
   link/void 
3: imq1:  mtu 16000 qdisc fq_codel qlen 11000
   link/void 
4: eth0:  mtu 1492 qdisc htb qlen 1000
   link/ether dc:ef:09:f2:87:e9 brd ff:ff:ff:ff:ff:ff
   inet 192.168.100.3/24 brd 192.168.100.255 scope global eth0
      valid_lft forever preferred_lft forever
   inet6 fe80::deef:9ff:fef2:87e9/64 scope link 
      valid_lft forever preferred_lft forever
5: eth1:  mtu 1500 qdisc fq_codel master br0 qlen 1000
   link/ether dc:ef:09:f2:87:e8 brd ff:ff:ff:ff:ff:ff
   inet6 fe80::deef:9ff:fef2:87e8/64 scope link 
      valid_lft forever preferred_lft forever
6: teql0:  mtu 1500 qdisc noop qlen 100
   link/void 
19: ip6tnl0@NONE:  mtu 1452 qdisc noop 
   link/tunnel6 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 brd 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
20: br0:  mtu 1500 qdisc noqueue 
   link/ether dc:ef:09:f2:87:e8 brd ff:ff:ff:ff:ff:ff
   inet 169.254.255.1/16 brd 169.254.255.255 scope global br0:0
      valid_lft forever preferred_lft forever
   inet 192.168.2.1/24 brd 192.168.2.255 scope global br0
      valid_lft forever preferred_lft forever
   inet6 fe80::deef:9ff:fef2:87e8/64 scope link 
      valid_lft forever preferred_lft forever
21: ath0:  mtu 1500 qdisc noqueue master br0 
   link/ether 0a:b1:2c:d4:5e:f0 brd ff:ff:ff:ff:ff:ff
   inet6 fe80::8b1:2cff:fed4:5ef0/64 scope link 
      valid_lft forever preferred_lft forever
22: ath0.1:  mtu 1500 qdisc noqueue 
   link/ether 08:b1:2c:d4:5e:f0 brd ff:ff:ff:ff:ff:ff
   inet 172.16.1.1/24 brd 172.16.1.255 scope global ath0.1
      valid_lft forever preferred_lft forever
   inet6 fe80::ab1:2cff:fed4:5ef0/64 scope link 
      valid_lft forever preferred_lft forever
23: ath1:  mtu 1500 qdisc noqueue master br0 
   link/ether dc:ef:09:f2:87:eb brd ff:ff:ff:ff:ff:ff
   inet6 fe80::deef:9ff:fef2:87eb/64 scope link 
      valid_lft forever preferred_lft forever
24: tun1:  mtu 1500 qdisc fq_codel qlen 100
   link/[65534] 
   inet 10.128.250.xxx/16 brd 10.128.255.xxx scope global tun1
      valid_lft forever preferred_lft forever

您的第二條規則包含-d <routerIp>但根據您的描述,是內部路由器 IP。

來自外部的數據包不會到達內部 IP。如果你的外部IP是靜態的,你可以插入你的外部IP,否則只需要指定外部介面,看起來是tun1,否則你還必須適應你的第一條規則。

正如 RalfFriedl 正確指出的那樣,由於我正在連接到 VPN 提供商,我應該登錄到站點並在我的個人資料下添加我想要使用的埠。

之後,規則是:

iptables -A FORWARD -i tun1 -p tcp -d <nasIP> --dport <nasPort> -j ACCEPT
iptables -t nat -I PREROUTING -i tun1 -p tcp --dport <nasPort> -j DNAT --to-destination <nasIP>

過去我已經做過幾十次的事情……

引用自:https://serverfault.com/questions/927062