我有一個具有兩個網絡接口泊塢窗應用容器(node:latest
圖像):港碼頭工人基於容器的路由
- 的eth1:這是一個默認的界面,是從所有容器之間的橋接網絡一項服務。 (由
pipework
管理,但我不能改變這個水平的任何東西) - 爲eth0:是常規
docker0
接口,並已獲得無處不在,除了那些在eth1
。
這裏是默認的路由表:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.25.88.254 0.0.0.0 UG 0 0 0 eth1
10.25.88.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
正如你看到它是需要有eth1
爲默認界面,但它使我一個問題:我的應用程序需要ssh
訪問一些其他遠程通過eth1
無法訪問的服務器,但eth0
有權訪問。所以我需要改變這個請求的路由。我的第一個解決方案是這樣的:
route add -net 10.20.33.0/24 gw 172.17.42.1
這種方式工作得很好,我會得到範圍10.20.33.0/24
訪問這些地址。但它會阻止從主機訪問應用程序本身。該應用程序在端口80上運行,並且在添加此路由之後,來自範圍爲10.20.33.0/24
的主機的所有請求都將失敗。
所以我想這條路線是如此全球化,並影響所有輸入/輸出請求的IP範圍。我搜索的方式,只是途徑輸出的SSH要求各地計算器,到目前爲止,這是我所:
# Initialize route table
echo 1 p.ssh > /etc/iproute2/rt_tables
ip route add table p.ssh default via 172.17.42.1
# Mark Packet with matching D.Port
iptables -A PREROUTING -t mangle -p tcp --dport 22 -j MARK --set-mark 1
iptables -A POSTROUTING -t nat -o eth0 -p tcp --dport 22 -j SNAT --to 172.17.42.1
#IP Route
ip rule add fwmark 1 table p.ssh
ip route flush cache
#IP Stack
#This is the missing part from the guide
echo 1 > /proc/sys/net/ipv4/ip_forward
for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 0 > $f ; done
echo 0 > /proc/sys/net/ipv4/route/flush
但它無法正常工作。我試圖通過iptables
登錄標記的包,所以也許我能找到在這個過程中的任何問題,但syslog
沒有在容器內運行,所以我安裝了它apt-get install rsyslog
,並將此規則:
iptables -A PREROUTING -t mangle -p tcp --dport 22 -j LOG --log-level 4 --log-prefix "fwmark 1: "
但它的不記錄任何東西。
有你刪除這條路線:路線添加-net 10.20.33.0/24 GW 172。17.42.1你爲路由ssh設置了iptables之後嗎? –
http://unix.stackexchange.com/questions/1194/multigateway-routing-for-specific-src-port?rq=1可能有助於解決您的問題。 –
@ThanhNguyenVan是的,我已經刪除了該路線,並感謝有關鏈接,我已經嘗試過(最後一條評論)並且沒有任何更改,問題仍然存在。 – Shahinism