Linux
是否可以從兩個網際網路連接訪問伺服器
如何做到這一點:
有:
- 美分 6.5
- WAN1 eth0 44.44.44.44(DEFROUTE=yes)
- WAN2 ppp0 95.95.95.95 (DEFROUTE=no)
- HTTP 伺服器工作且僅在 eth0 中可用
- DNS 伺服器工作,但埠 53 在 eth0 中被阻止
- ping 僅在 eth0 中可用
- 客戶端可以通過 eth0 訪問 HTTP 和 PING
- ISP 阻止 eth0 中的 53 埠
- ISP 在 ppp0 中阻止埠 80
需要:
- 客戶端 PC 必須可以 PING eth0 和 ppp0
- 客戶端 PC 必須可以在 eth0 中保持對 HTTP 的訪問
- 客戶端 PC 必須可以訪問 ppp0 中的 DNS
我試著做這個,但直到最後才明白怎麼做:
echo 2 ppp0_OUT >> /etc/iproute2/rt_tables ip route add default via 95.95.95.95 dev ppp0 table ppp0_OUT iptables -A PREROUTING -i ppp0 -t mangle -j MARK --set-mark 2 ip rule add fwmark 2 table ppp0_OUT ip route flush cache sysctl -w net.ipv4.conf.eth0.rp_filter=0 sysctl -w net.ipv4.conf.ppp0.rp_filter=0
問題:
1)如何使客戶端PC可以同時通過eth1和ppp0訪問伺服器
- 客戶端 PC 必須可以通過 ppp0 訪問 DNS 並通過 eth0 訪問 HTTP
這是非常簡單的答案:)
只需要:
- 如果客戶端 PC 通過 WAN1 連接,他必須通過 WAN1 得到答案
- 如果客戶端 PC 通過 WAN2 連接,他必須通過 WAN2 得到答案
答案:WAN1 有選項DEFROUTE=yes,當 WAN1 啟動時,他是:
# ip route .... default via 44.44.44.44 dev eth0 proto static
WAN2**沒有預設路由!!!**我們需要為 WAN2 創建預設路由,它是一個簡單的腳本:
#!/bin/bash ### # echo 202 out_ppp0 >> /etc/iproute2/rt_tables ip route flush table out_ppp0 ip rule del table out_ppp0 IP_ppp0=$(/sbin/ifconfig ppp0 | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}') ip rule add from $IP_ppp0 table out_ppp0 ip route add default via $IP_ppp0 dev ppp0 table out_ppp0