Linux

使用 OpenVPN 隧道進行埠轉發

  • August 9, 2019

我正在嘗試通過使用 openvpn 隧道站點到站點到另一台伺服器來隱藏我的網路伺服器。

這是架構:

SERVER1                        SERVER2
WEBSERVER               <=>    (OPENVPN CLIENT)        <=>  PEOPLE
(OPENVPN SERVER)               Private IP: 10.8.0.2
Private IP: 10.8.0.1

當然,SERVER1 和 SERVER2 也都有一個公共 ip(連接到 WAN),私有 ip 代表用來連接它們與 vpn 的 ip。

我希望人們通過 SERVER2 訪問 SERVER1 上的網路伺服器,以隱藏 SERVER1 公共 IP。

我用openvpn創建了一個站點到站點的隧道,所以從SERVER2我可以使用openvpn私有IP訪問SERVER1上的網路伺服器,但是我不能從SERVER2公共IP訪問它。

在此先感謝您的幫助!

ip 輸出

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
      valid_lft forever preferred_lft forever
   inet6 ::1/128 scope host 
      valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
   link/ether 9a:63:f1:37:d8:f5 brd ff:ff:ff:ff:ff:ff
   inet PUBLIC_IP/20 brd PUBLIC_IP
scope global eth0
      valid_lft forever preferred_lft forever
   inet 10.19.0.5/16 brd 10.19.255.255 scope global eth0
      valid_lft forever preferred_lft forever
   inet6 2a03:b0c0:3:e0::c4:6001/64 scope global 
      valid_lft forever preferred_lft forever
   inet6 fe80::9863:f1ff:fe37:d8f5/64 scope link 
      valid_lft forever preferred_lft forever
40: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
   link/none 
   inet 10.8.0.2 peer 10.8.0.1/32 scope global tun0
      valid_lft forever preferred_lft forever

您需要將傳入 Server2(埠 80 和/或 443)的流量重定向到 Server1 的 OpenVPN tun IP 地址。

有不止一種方法可以做到這一點。我個人過去做過以下事情:

選項 1: 在 Server2 上執行 Web 伺服器並將所有請求轉發到這兩個埠的“本地”IP 地址 10.8.0.1。Web 伺服器甚至可以記憶體請求,我發現這很有利。

選項 2: 使用 IP 轉發(成本較小)。在伺服器 2 上:

sysctl net.ipv4.ip_forward=1

然後轉發(*):

iptables -t nat -A PREROUTING -p tcp -d PUBLIC_IP --dport 80 -j DNAT --to-destination 10.8.0.1:80

你可能也需要偽裝:

iptables -t nat -A POSTROUTING -j MASQUERADE

如果可行,請將第一個選項保存到/etc/sysctl.conf

net.ipv4.ip_forward = 1

並保存您的 IP 表規則。這取決於你的分佈!在 CentOS 7 中:

mv -i /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
iptables-save > /etc/sysconfig/iptables

systemctl stop firewalld
systemctl mask firewalld
yum install iptables-services 
systemctl enable iptables

由於過去幾年防火牆和發行版之間發生了許多變化,因此您的里程可能會有所不同。

(*) 如果您需要的不僅僅是一個埠,您可以使用一個範圍:

iptables -t nat -A PREROUTING -p tcp -d PUBLIC_IP --dport 80:1080 -j DNAT --to-destination 10.8.0.1:80-1080

引用自:https://unix.stackexchange.com/questions/534774