为了解决内外网访问问题,用一台ubuntu 14.04.1安装了OpenVPN,并利用ubuntu自带的iptables做NAT。但是做完后发现,简单的远程访问没有问题,但是当数据返回稍微一大,如查看一个文件,或者传输一个文件时,访问终端就会吊死。但是利用iftop查看网络流量确是正常的。
网络结构如下:
sh
oper@~ % ifconfig 15-01-25 5:59 docker0 Link encap:Ethernet HWaddr 56:84:7a:fe:97:99 inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) eth0 Link encap:Ethernet HWaddr 00:50:56:b0:8a:0b inet addr:9.115.251.155 Bcast:9.115.251.255 Mask:255.255.255.0 inet6 addr: fe80::250:56ff:feb0:8a0b/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:11790 errors:0 dropped:0 overruns:0 frame:0 TX packets:1070 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1010944 (1.0 MB) TX bytes:149870 (149.8 KB) eth1 Link encap:Ethernet HWaddr 00:50:56:b0:1c:a7 inet addr:10.10.10.5 Bcast:10.10.10.255 Mask:255.255.255.0 inet6 addr: fe80::250:56ff:feb0:1ca7/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:492 errors:0 dropped:0 overruns:0 frame:0 TX packets:104 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:60870 (60.8 KB) TX bytes:11280 (11.2 KB)
需求是从eth0访问的用户能够访问到eth1网络内的机器。
iptables的规则如下:
sh
oper@~ % cat /etc/iptables-rules 15-01-25 5:59 # Generated by iptables-save v1.4.21 on Tue Jan 6 06:00:25 2015 *nat :PREROUTING ACCEPT [1:78] :INPUT ACCEPT [1:78] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] :DOCKER - [0:0] -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER -A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE -A POSTROUTING -o eth1 -j MASQUERADE COMMIT # Completed on Tue Jan 6 06:00:25 2015 # Generated by iptables-save v1.4.21 on Tue Jan 6 06:00:25 2015 *filter :INPUT ACCEPT [80:10140] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [69:6479] -A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A FORWARD -i docker0 ! -o docker0 -j ACCEPT -A FORWARD -i docker0 -o docker0 -j ACCEPT -A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT # -A FORWARD -i eth1 -o eth0 -j ACCEPT -A FORWARD -i eth0 -o eth1 -j ACCEPT COMMIT # Completed on Tue Jan 6 06:00:25 2015
换了几台终端都是同样的问题。但是在这台ubuntu上向内网访问,或者是外网终端直接访问ubuntu却都没有问题,所以估计是iptables的问题。
不知sf上有人能帮到我么?
PHPz2017-04-21 11:18:32
테스트 결과 iptables와는 관련이 없는 것으로 확인되었습니다. 처음에는 Ubuntu의 MTU에 문제가 있는 줄 알았는데, 테스트 결과 잘못된 것으로 나타났습니다. 나중에 패킷을 캡처해 보니 해당 세션에서 크기가 1422인 프레임이 지속적으로 재전송되는 것을 발견했습니다. 디버깅 후 OpenVPN의 MTU 크기 문제인 것을 확인했습니다.
OpenVPN 서버와 클라이언트 모두에 MTU 구성을 추가한 후 연결이 정상화되었습니다.
툰투 1500
조각 1300
mssfix 1300
그런데 제가 궁금한 건 왜 이전에는 WINDOWS에서 MTU를 수정하지 않고도 괜찮았을까요?