使用 IPTables 在內部網路上存取 Internet

使用 IPTables 在內部網路上存取 Internet

在我正在設定的私有雲上,我有一些 RHEL VM、網路和 OpenStack 上的路由器。我的路由器連接到公共互聯網,我的網關節點連接到路由器並透過 eth0 存取互聯網。此節點透過 eth1 連接到內部網路。我有一些內部 RHEL 節點透過其 eth0 介面連接到內部網路。這些節點都可以互相 ping 通,而且我相信每個節點的 ifcfg 檔案都設定正確。

使用 IPTables,我嘗試透過以下方式為內部節點提供網路存取權限:

iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT  
iptables -A FORWARD -i eth0 -o eth1 -m conntrack -ctstate ESTABLISHED,RELATED -j ACCEPT  
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

我還在核心層級啟用了 ipv4 轉送(預設為停用)。儲存配置並透過 SSH 連接到內部節點後,我無法 ping 通外部位址:

# ping 8.8.8.8
connect: Network is unreachable

我在 openstack 中的路由器有一條靜態路由,
目標 CIDR:我的內部網路
下一跳:我的網關節點

為什麼我的內部節點無法上網?我在這裡缺少什麼?

答案1

可能是您沒有在核心中啟用轉送 -

嘗試

echo 1 > /proc/sys/net/ipv4/forward

如果這解決了問題,請透過編輯 /etc/sysctl.conf 並新增以下行使其永久化

net.ipv4.ip_forward = 1

答案2

Network is unreachable表示沒有定義到達 8.8.8.8 的路由。這很可能是虛擬機器直接回傳的問題,並且是虛擬機器而不是主機中的問題。

OpenStack 有許多不同的可能的網路配置。您只是寫了“網路”,並沒有提供有關虛擬機器 IP 的任何資訊。希望沒有未知的設定(已完成中間 NAT 的中間網路),在每個虛擬機器上,您需要透過路由器eth1介面上設定的 IP 新增預設路由。例如,如果此 IP 是 10.0.2.1,則可以執行下列操作:

ip route add default via 10.0.2.1

對於永久設置,應將其添加到其特定的配置文件中(請參閱靜態路由和預設網關來自紅帽)。

相關內容