Linux
iproute rt_table 和標記在 linux 上不起作用
我有這個配置來自官方和非官方的指南和問題閱讀here以及許多失敗的測試。CentOS 7 和 Ubuntu 伺服器 15(LAMP 和僅 eth0)。
/etc/iproute2/rt_tables
1 tunnel0
我準備路線和標記
ip route add 0.0.0.0/0 dev tun0 table 1 ip rule add from all fwmark 1 table 1 ip route flush cache
(也嘗試使用表 ID,通過“10.123.123.x”聲明 tun0 地址和 tun0 網關…)
平板電腦
iptables -A PREROUTING -t mangle -p tcp --dport 80 -j MARK --set-mark 1 iptables-save
我看到的是 eth0 ISP 公共 IP,而不是 tun0,我可以看到它強制“路由添加”靜態路由。我錯過了什麼?謝謝你。
我在這裡解決並記錄了它:http: //aftermanict.blogspot.it/2015/11/bash-iptables-iproute2-and-multiple.html
這將使核心永久路由數據包,啟用多個路由,甚至對於未在機器上證明的網路:
nano /etc/sysctl.conf net.ipv4.conf.default.rp_filter = 2 net.ipv4.conf.all.rp_filter = 2 net.ipv4.ip_forward = 1 for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 >| $f ; done
這將初始化 iptables,尤其是 mangle 和 nat,它們是標記流量所必需的:
iptables -F iptables -t nat -F iptables -t mangle -F iptables -X
添加替代路線編輯:
nano /etc/iproute2/rt_tables
添加(名稱是您的參考):
1 tunnel0 2 tunnel1
添加路由和規則,我們使用表 ID 而不是更直接的名稱。如您所見,網關無關緊要,尤其是對於可以具有動態網關的隧道:
ip route add 0.0.0.0/0 dev tun0 table 1 ip route add 0.0.0.0/0 dev tun1 table 2
添加規則以標記流量並綁定到相應的表:
ip rule add from all fwmark 1 table 1 ip rule add from all fwmark 2 table 2 ip route flush cache
檢查你是否喜歡:
ip route show table 1 ip route show table 2 ip rule show
如果你錯過了什麼,你可以這樣刪除:
ip rule del table 1 ip route flush table 1
現在缺少的部分:這行不通:
iptables -A PREROUTING -t mangle -p tcp --dport 80 -j MARK --set-mark 1
這會:
iptables -A OUTPUT -t mangle -p tcp --dport 80 -j MARK --set-mark 1 iptables-save
您是否需要選擇流量並將其同時推送到設備/隧道中?沒問題,我也解決了這個問題:
iptables -A OUTPUT -t mangle -p tcp --dport 10001 -j MARK --set-mark 1 iptables -A OUTPUT -t mangle -p tcp --dport 10002 -j MARK --set-mark 2 iptables -t nat -A OUTPUT -p tcp --dport 10001 -j DNAT --to :80 iptables -t nat -A OUTPUT -p tcp --dport 10002 -j DNAT --to :80
NAT 強制回复
iptables -t nat -A POSTROUTING -o $DEV1 -j MASQUERADE iptables -t nat -A POSTROUTING -o $DEV2 -j MASQUERADE iptables-save