作者zhucc (阿朱哥)
看板Linux
標題[問題] iptables 問題
時間Tue Oct 22 20:22:43 2013
目前架構是
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
1F:→ paar:這是 PC2 default gateway 的問題 10/22 21:29
所以請問有解嗎? 因為PC2有自行對外連線的需求,所以沒辦法關 pppoe 連線
2F:推 yvb:大概兩種解法.[1]PC1轉送PC2時做SNAT,但PC2無法得知真正來源. 10/22 22:05
3F:→ yvb:[2]PC2對特定port用policy route,但外面無法直接連PC2該port. 10/22 22:08
4F:推 rickieyang:policy route 應該沒用, 只能 SNAT. 10/22 23:09
5F:→ rickieyang:PC2看到同內網連線就直接回, 但PC3不認帳, drop 掉... 10/22 23:10
6F:→ rickieyang:等等...... PC3 是內網吧?? @@ 10/22 23:11
PC3 是指外網,抱歉沒說清楚
另外可以單就 PC1到PC2 轉送時做 SNAT 嗎?
指令該怎麼下,因為我對這邊實在不是很熟悉
7F:→ rellik:-i ppp0 你的 interface 是 ppp0 嗎? 能否貼個 ifconfig 10/22 23:59
8F:→ rellik:另外貼一下 iptables-save 10/23 00:03
9F:→ rellik:看到最底下PC2也撥接? 既然和PC1是同網段怎麼不是把default 10/23 00:06
10F:→ rellik:gateway 設定在 PC1 呢? 10/23 00:07
是 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
11F:推 rellik:所以 PC2 因為有跑撥接的關係,192.168.1 的網段也是 nat 來 10/23 01:30
12F:→ rellik:的嗎? 還是說是另外接網卡在 switch 上? 10/23 01:31
13F:→ rellik:換個問法, PC1和 PC2 192.168.1的ip是可以互相ping有回應? 10/23 01:37
PC1 和 PC2 都有跑撥接
然後 192.168.1.0/24 是自訂的網段,可以互相 ping 沒問題
兩台機器都只有一張網卡而已
14F:推 yvb:回四樓rick大, 看原po的iptables rule, 是從ppp0來的才DNAT, 10/23 13:16
15F:→ yvb:不是內網,所以 policy route 不會不 work. 10/23 13:16
16F:→ yvb:另外, 關於SNAT的部分, 在PC2只會看到是192.168.1.254連過來; 10/23 13:16
17F:→ yvb:作法最好搭配 mangle table 及 fwmark 來做: 10/23 13:16
18F:→ yvb:iptables -t mangle -A PREROUTING -i ppp0 -p tcp \ 10/23 13:17
19F:→ yvb: --dport 9999 -j MARK --set-mark 0x1/0x1 ; 10/23 13:17
20F:→ yvb:iptables -t nat -A PREROUTING -m mark --mark 0x1/0x1 \ 10/23 13:17
21F:→ yvb: -j DNAT --to-destination 192.168.1.250:3306 ; 10/23 13:17
22F:→ yvb:iptables -t nat -A POSTROUTING -d 192.168.1.250 \ 10/23 13:17
23F:→ yvb: -m mark --mark 0x1/0x1 -j MASQUERADE ; 10/23 13:17
24F:→ yvb:上面的 -j MASQUERADE 也可改為 10/23 13:18
25F:→ yvb: -j SNAT --to-source 192.168.1.254 10/23 13:18
26F:→ yvb:效果相同, 但用 -j MASQUERADE 較方便. 10/23 13:18
27F:→ yvb:當然, -d 192.168.1.250 在這情況下改用 -o eth0 也可以. 10/23 13:18
28F:→ yvb:若按上面的設定, 原 po 原來的那一筆 DNAT 就要拿掉. 10/23 13:21
29F:→ yvb:其實 -d 192.168.1.250 或 -o eth0 不寫應該也 OK. 10/23 13:26
感謝 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)
30F:推 yvb:一時不查. 有設定 port (像上述 DNAT) 時就要加上 protocol. 10/23 16:24