[問題] iptables 問題

看板Linux作者 (阿朱哥)時間12年前 (2013/10/22 20:22), 編輯推噓5(5025)
留言30則, 4人參與, 最新討論串1/2 (看更多)
目前架構是 PC3 ----- 小烏龜----switch-----PC1 Internet | 192.168.1.254 (撥接,NAT) | eth0 ppp0 PC2 192.168.1.250(撥接) eth0 ppp0 PC1 和 PC2 系統都是 centos PC1 用 @ip.hinet.net 撥接、然後負責 NAT 和 DHCP PC2 用 @hinet.net 撥接 現在 PC3 要透過 PC1 的 9999 port 的 IP 連進 PC2 的 port 3306 我在 PC1 設 iptables ,把 port 9999 都導到 PC2 的 port 3306 ,但是一直無法連線 iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 9999 -j DNAT --to-destination 192.168.1.250:3306 請問有那個地方該修改的嗎? 個人思考應該是和 PC2 也有撥接的關係、但不知道該怎麼改 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.33.55.125 zhucc:轉錄至看板 Network 10/22 20:35

10/22 21:29, , 1F
這是 PC2 default gateway 的問題
10/22 21:29, 1F
所以請問有解嗎? 因為PC2有自行對外連線的需求,所以沒辦法關 pppoe 連線

10/22 22:05, , 2F
大概兩種解法.[1]PC1轉送PC2時做SNAT,但PC2無法得知真正來源.
10/22 22:05, 2F

10/22 22:08, , 3F
[2]PC2對特定port用policy route,但外面無法直接連PC2該port.
10/22 22:08, 3F

10/22 23:09, , 4F
policy route 應該沒用, 只能 SNAT.
10/22 23:09, 4F

10/22 23:10, , 5F
PC2看到同內網連線就直接回, 但PC3不認帳, drop 掉...
10/22 23:10, 5F

10/22 23:11, , 6F
等等...... PC3 是內網吧?? @@
10/22 23:11, 6F
PC3 是指外網,抱歉沒說清楚 另外可以單就 PC1到PC2 轉送時做 SNAT 嗎? 指令該怎麼下,因為我對這邊實在不是很熟悉

10/22 23:59, , 7F
-i ppp0 你的 interface 是 ppp0 嗎? 能否貼個 ifconfig
10/22 23:59, 7F

10/23 00:03, , 8F
另外貼一下 iptables-save
10/23 00:03, 8F

10/23 00:06, , 9F
看到最底下PC2也撥接? 既然和PC1是同網段怎麼不是把default
10/23 00:06, 9F

10/23 00:07, , 10F
gateway 設定在 PC1 呢?
10/23 00:07, 10F
是 ppp0 沒錯 然後因為有跑某些程式,所以 dafault gateway 沒辦法設在 PC1 iptables-save *nat :PREROUTING ACCEPT [128:15380] :POSTROUTING ACCEPT [3407:204420] :OUTPUT ACCEPT [6799:406670] -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE -A POSTROUTING -o ppp0 -j MASQUERADE COMMIT *filter :INPUT DROP [4625:1814415] :FORWARD ACCEPT [3493355:2820439735] :OUTPUT ACCEPT [4207862:890968157] -A INPUT -i lo -j ACCEPT -A INPUT -m state --state RELATED -j ACCEPT -A INPUT -m state --state ESTABLISHED -j ACCEPT -A INPUT -i ppp0 -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -i ppp0 -p tcp -m tcp --dport 8080 -j ACCEPT -A INPUT -i eth0 -j ACCEPT COMMIT ifconfig eth0 Link encap:Ethernet HWaddr 00:E0:81:2D:06:0C inet addr:192.168.1.254 Bcast:192.168.1.255 Mask:255.255.255.0 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 ppp0 Link encap:Point-to-Point Protocol inet addr:***.***.***.*** P-t-P:168.95.98.254 Mask:255.255.255.255

10/23 01:30, , 11F
所以 PC2 因為有跑撥接的關係,192.168.1 的網段也是 nat 來
10/23 01:30, 11F

10/23 01:31, , 12F
的嗎? 還是說是另外接網卡在 switch 上?
10/23 01:31, 12F

10/23 01:37, , 13F
換個問法, PC1和 PC2 192.168.1的ip是可以互相ping有回應?
10/23 01:37, 13F
PC1 和 PC2 都有跑撥接 然後 192.168.1.0/24 是自訂的網段,可以互相 ping 沒問題 兩台機器都只有一張網卡而已

10/23 13:16, , 14F
回四樓rick大, 看原po的iptables rule, 是從ppp0來的才DNAT,
10/23 13:16, 14F

10/23 13:16, , 15F
不是內網,所以 policy route 不會不 work.
10/23 13:16, 15F

10/23 13:16, , 16F
另外, 關於SNAT的部分, 在PC2只會看到是192.168.1.254連過來;
10/23 13:16, 16F

10/23 13:16, , 17F
作法最好搭配 mangle table 及 fwmark 來做:
10/23 13:16, 17F

10/23 13:17, , 18F
iptables -t mangle -A PREROUTING -i ppp0 -p tcp \
10/23 13:17, 18F

10/23 13:17, , 19F
--dport 9999 -j MARK --set-mark 0x1/0x1 ;
10/23 13:17, 19F

10/23 13:17, , 20F
iptables -t nat -A PREROUTING -m mark --mark 0x1/0x1 \
10/23 13:17, 20F

10/23 13:17, , 21F
-j DNAT --to-destination 192.168.1.250:3306 ;
10/23 13:17, 21F

10/23 13:17, , 22F
iptables -t nat -A POSTROUTING -d 192.168.1.250 \
10/23 13:17, 22F

10/23 13:17, , 23F
-m mark --mark 0x1/0x1 -j MASQUERADE ;
10/23 13:17, 23F

10/23 13:18, , 24F
上面的 -j MASQUERADE 也可改為
10/23 13:18, 24F

10/23 13:18, , 25F
-j SNAT --to-source 192.168.1.254
10/23 13:18, 25F

10/23 13:18, , 26F
效果相同, 但用 -j MASQUERADE 較方便.
10/23 13:18, 26F

10/23 13:18, , 27F
當然, -d 192.168.1.250 在這情況下改用 -o eth0 也可以.
10/23 13:18, 27F

10/23 13:21, , 28F
若按上面的設定, 原 po 原來的那一筆 DNAT 就要拿掉.
10/23 13:21, 28F

10/23 13:26, , 29F
其實 -d 192.168.1.250 或 -o eth0 不寫應該也 OK.
10/23 13:26, 29F
感謝 yvb 大的教學,上面指令做點小更動確定可以用 iptables -t mangle -A PREROUTING -i ppp0 -p tcp --dport 9999 \ -j MARK --set-mark 0x1/0x1 iptables -t nat -A PREROUTING -m mark --mark 0x1/0x1 -p tcp \ -j DNAT --to-destination 192.168.1.250:3306 iptables -t nat -A POSTROUTING -d 192.168.1.250 -m mark --mark 0x1/0x1 \ -j MASQUERADE ※ 編輯: zhucc 來自: 114.33.55.125 (10/23 14:17)

10/23 16:24, , 30F
一時不查. 有設定 port (像上述 DNAT) 時就要加上 protocol.
10/23 16:24, 30F
文章代碼(AID): #1IPcuMks (Linux)
討論串 (同標題文章)
文章代碼(AID): #1IPcuMks (Linux)