作者 主題: Linux 兩個ISP做DNAT  (閱讀 3411 次)

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

Yanny

  • 憂鬱的高中生
  • ***
  • 文章數: 177
    • 檢視個人資料
Linux 兩個ISP做DNAT
« 於: 2013-06-19 17:14 »
各位學長,小弟有一個問題想請教大家.
我在一台Linux FireWall有綁兩個ISP,網卡資訊如下:
eth0:192.168.58.0/24(DMZ)
eth1:中華電信(Default GateWay)簡稱ISP1
eth2:10.0.58.0/24(LAN)
eth3:台灣固網(無設 GateWay)簡稱ISP2
我有做Multi-Homing,參考網址如下
http://sivel.net/2006/12/linux-multi-homing/
代碼: [選擇]
    #!/bin/bash
    #Set up the first subnet's routing table (we'll name it 70)
    /sbin/ip route flush table 70
    /sbin/ip route add table 70 to 172.70.12.0/23(ISP1) dev eth1
    /sbin/ip route add table 70 to default via 172.70.12.1 dev eth1
    #Set up the second subnet's routing table (we'll call it 80)
    /sbin/ip route flush table 80
    /sbin/ip route add table 80 to 172.80.24.0/23(ISP2) dev eth3
    /sbin/ip route add table 80 to default via 172.80.24.1 dev eth3
    #Create the rules to choose what table to use. Choose based on source IP
    #We need to give the rules different priorities; for convenience name priority
    #after the table
    /sbin/ip rule add from 172.70.12.0/23 table 70 priority 70
    /sbin/ip rule add from 172.80.24.0/23 table 80 priority 80
    #Flush the cache to make effective
    /sbin/ip route flush cache
我可以從外部 Ping的到 ISP2的IP,但是我無法從ISP2的IP做Port Forward,ISP1 IP可以做port forward
我下了以下這兩個指令做Port Forward
iptable -A INPUT -i eth3 -j ACCEPT
iptables -A PREROUTING -t nat -i eth3 -p tcp --dport 80 -j DNAT --to 192.168.58.50:80
iptables -A INPUT -p tcp -m state --state NEW --dport 80 -i eth3 -j ACCEPT
請問各位學長有沒有遇到這種問題,可以給我一些建議嗎?
謝謝!

dark

  • 俺是博士!
  • *****
  • 文章數: 1581
    • 檢視個人資料
Re: Linux 兩個ISP做DNAT
« 回覆 #1 於: 2013-06-20 11:39 »
小弟沒實做喔 ...

iptables -A PREROUTING -t nat -i eth3 -d realip -p tcp --dport 80 -j DNAT --to 192.168.58.50:80
這樣記憶體中應會多記住一個條件來還原 ...

1. 有可能 isp2 nat 正確 , 卻丟 isp1 介面
2. 有可能對外皆 nat 成 isp1 ip

tcpdump 兩介面看看吧


Yanny

  • 憂鬱的高中生
  • ***
  • 文章數: 177
    • 檢視個人資料
Re: Linux 兩個ISP做DNAT
« 回覆 #2 於: 2013-06-20 14:26 »
謝謝學長的方法,我有下這個指令,但還是沒用,我用tcpdump eth1和eth3.
eth1沒有任何資訊,eth3有以下的資訊
14:18:43.554220 IP 114.57.97.31.3118 > 219.27.159.134.80: S 2118363952:2118363952(0) win 8192 <mss 1452,nop,nop,sackOK>
可是我看不懂這是什麼意思?
這台Firewall的iptable是針對原本只有一家ISP做SNAT和DNAT,我新增這家的ISP2我只做上述那兩個指令做DNAT,不知道還有沒有需要修改什麼?
請各位學長給小弟一些建議,讓小弟可以多方面思考,謝謝!

dark

  • 俺是博士!
  • *****
  • 文章數: 1581
    • 檢視個人資料
Re: Linux 兩個ISP做DNAT
« 回覆 #3 於: 2013-06-20 16:10 »
把上面 routing table 清掉吧
那樣的設定不是用來分流到兩個 IPS


在站裡搜尋一下 nexthop ... 一樣也是用 ip 指令


Yanny

  • 憂鬱的高中生
  • ***
  • 文章數: 177
    • 檢視個人資料
Re: Linux 兩個ISP做DNAT
« 回覆 #4 於: 2013-06-20 17:37 »
我試著去下這個command,但得到訊息是一樣的,是我遺漏了什麼嗎?還是目的地主機需要設定什麼嗎?
iptables -A PREROUTING -i eth3 -t mangle -p tcp --dport 80 -j MARK --set-mark 2
echo 202 twn >> /etc/iproute2/rt_tables
ip rule add fwmark 2 table twn
ip route replace default nexthop via "ISP GW" dev eth3
« 上次編輯: 2013-06-20 18:02 由 Yanny »

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17464
    • 檢視個人資料
    • http://www.study-area.org
Re: Linux 兩個ISP做DNAT
« 回覆 #5 於: 2013-06-20 20:18 »
沒環境去試,不過我覺得ip rules那邊可能要設source routing,指定被DNAT的server必須從哪邊路由回去。

Yanny

  • 憂鬱的高中生
  • ***
  • 文章數: 177
    • 檢視個人資料
Re: Linux 兩個ISP做DNAT
« 回覆 #6 於: 2013-07-04 11:49 »
謝謝netman的指導,我有試著去做SNAT,但結果還是一樣,因為時間急迫,所以暫時用Pfsense去做取代.
等以後有時間在好好研究一下, 謝謝各位學長的指導,謝謝!

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17464
    • 檢視個人資料
    • http://www.study-area.org
Re: Linux 兩個ISP做DNAT
« 回覆 #7 於: 2013-07-04 13:05 »
SNAT並不是source routing喔〜^_^