作者 主題: port forwarding 與 NAT  (閱讀 4911 次)

0 會員 與 1 訪客 正在閱讀本文。

josephyen

  • 可愛的小學生
  • *
  • 文章數: 4
    • 檢視個人資料
port forwarding 與 NAT
« 於: 2005-07-05 11:54 »
現在我有個私有網域 192.168.1.0/24
內部有三台 server,分別是 192.168.1.1, 192.168.1.2, 192.168.1.3
然後有三個 public IP,分別是 220.0.0.1, 220.0.0.2, 220.0.0.3 它們的 gateway 都是 220.0.0.254

現在希望以 192.168.1.254 為 gateway,並將三個 public IP 分別對應到三臺內部的 server。
也就是說 internet 上的人連到 220.0.0.X 相當於連到 192.168.1.X 這台 server。
192.168.1.X 這台 server 對外連時,也是以 220.0.0.X 的身份對外連。
非 server 的其它臺電腦則以 220.0.0.1 連出去。


線是如此接

代碼: [選擇]

                   internet
                       |
(eth1 220.0.0.1) (eth2 220.0.0.2) (eth3 220.0.0.3)
                    gateway
            (eth0 192.168.1.254)
                       |
      +--------------+-------------+--------------+
   server1        server2       server3        其他電腦
(192.168.1.1)  (192.168.1.2) (192.168.1.3) (192.168.1.0/24)

ifconfig eth0 192.168.1.254 netmask 255.255.255.0
ifconfig eth1 220.0.0.1 netmask 255.255.255.0
ifconfig eth2 220.0.0.2 netmask 255.255.255.0
ifconfig eth3 220.0.0.3 netmask 255.255.255.0

route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0
route add -net 220.0.0.0 netmask 255.255.255.0 dev eth1
route add -net 220.0.0.0 netmask 255.255.255.0 dev eth2
route add -net 220.0.0.0 netmask 255.255.255.0 dev eth3
# 要連到 220.0.0.0/24 網域從 eth1,2,3 都可以,那實際運作時會從哪個,iptables 有能力改變嗎?
route add default gw 220.0.0.254

modprobe ip_nat_ftp
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobn ip_conntrack_irc

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

iptables -F
iptables -X
iptables -F -t nat
iptables -X -t nat

# iptables -t nat -A POSTROUTING -j SNAT -s 192.168.1.1 -o eth1 --to 220.0.0.1
iptables -t nat -A POSTROUTING -j SNAT -s 192.168.1.2 -o eth2 --to 220.0.0.2
iptables -t nat -A POSTROUTING -j SNAT -s 192.168.1.3 -o eth3 --to 220.0.0.3
# 我有問題的地方就在此, -o eth2 or eth3 究竟是判別規則,還是能以此改變封包透過哪個裝置出去
# 或是 --to 220.0.0.2 or 3 就以經決定封包從哪個裝置出去了?
iptables -t nat -A POSTROUTING -j SNAT -s 192.168.1.0/24 -o eth1 --to 220.0.0.1

iptables -t nat -A PREROUTING -j DNAT -i eth1 -d 220.0.0.1 --to 192.168.1.1
iptables -t nat -A PREROUTING -j DNAT -i eth2 -d 220.0.0.2 --to 192.168.1.2
iptables -t nat -A PREROUTING -j DNAT -i eth3 -d 220.0.0.3 --to 192.168.1.3

# 還有上列規則是否有其它地方有問題。

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17462
    • 檢視個人資料
    • http://www.study-area.org
port forwarding 與 NAT
« 回覆 #1 於: 2005-07-05 13:36 »
將 eth2 eth3 拿掉, 只設 eth1 eth1:0 eth1:1 就好.

試試看?

josephyen

  • 可愛的小學生
  • *
  • 文章數: 4
    • 檢視個人資料
port forwarding 與 NAT
« 回覆 #2 於: 2005-07-05 21:38 »
引述: "netman"
將 eth2 eth3 拿掉, 只設 eth1 eth1:0 eth1:1 就好.

試試看?


之前就是這樣弄,結果三個 public ip 只 ping 得到兩個,原因不太清楚
後來才多加兩張網卡

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17462
    • 檢視個人資料
    • http://www.study-area.org
port forwarding 與 NAT
« 回覆 #3 於: 2005-07-05 22:35 »
那, 你先換回 ip alias,
再將 iptables 的規則清掉, 並全設為 ACCEPT.

等, ping 得上, 再談下一步...

josephyen

  • 可愛的小學生
  • *
  • 文章數: 4
    • 檢視個人資料
port forwarding 與 NAT
« 回覆 #4 於: 2005-07-06 17:57 »
引述: "netman"
那, 你先換回 ip alias,
再將 iptables 的規則清掉, 並全設為 ACCEPT.

等, ping 得上, 再談下一步...


只 ping 得到 2 個 public ip 的情況是剛設好 ip aliases,iptables 統統還沒設,統統都是 accept 時就有的問題。

anyway,我上面的 iptables 作法是可行的把 -o eth2 和 -o eth3 去掉就行了

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17462
    • 檢視個人資料
    • http://www.study-area.org
port forwarding 與 NAT
« 回覆 #5 於: 2005-07-06 22:46 »
那就不是 iptables 的問題了......

先搞定底層的 network, 再談上層的 nat 吧.

josephyen

  • 可愛的小學生
  • *
  • 文章數: 4
    • 檢視個人資料
port forwarding 與 NAT
« 回覆 #6 於: 2005-08-01 00:01 »
引述: "netman"
那就不是 iptables 的問題了......

先搞定底層的 network, 再談上層的 nat 吧.

之前是三張網卡三個 public IP,後來還是常常會一兩個 IP 掛點,連不出去
換成一張網卡三個 public IP,情況還是相同
通常是不斷重新啟動網路裝置來解決,有時候重新啟動十多次還是連不出去

自從限制上傳流量後,掛掉頻率有降低了
但是兩天內都至少發生一次

若那三個 public IP 換成 private IP,就完全沒有這個問題

更早之前是三個 public IP 三台電腦,好像都沒發生過這種斷掉的情況

這有可能是 ADSL modem 或是 hinet 那邊的問題嗎?
還是自己機器的問題呢?