作者coquelicot (蚯蚓)
看板PangSir
标题Re: [ CN ] HW3 - firewall
时间Tue Jan 1 12:48:39 2013
※ 引述《simonxander (显显)》之铭言:
: 同学你好:
: 我今天测试了一下,NAT并不会挡掉多出来的 reply
: 也没有限定 reply 的 data size 必须和 request 一样
: 所以我想有可能是 checksum 地方有错,才让 NAT 把 packet drop 了
: ※ 引述《simonxander (显显)》之铭言:
: : 对 理论上应该会有一台vm当作firewall,不过这样会需要3台vm
: : 为了简化测试程序,vm2就是在NAT外面的电脑了
: : firewall的功能就由vm1自己来模拟,所以是限制output
非常感谢助教的测试,
不过我上网查了之後觉得 checksum 很合理, 还请助教过目
uint16_t checksum(uint16_t *mem, int bytes){
uint32_t sum = 0;
while(bytes > 1){
sum += *mem++;
bytes -= 2;
}
if(bytes == 1){
uint16_t tmp = 0;
*(uint8_t*)(&tmp) = *(uint8_t*)mem;
sum += tmp;
}
sum = (sum >> 16) + (sum & 0xffff);
sum = (sum >> 16) + (sum & 0xffff);
return (uint16_t)~sum;
}
----------------------------------------------
真是麻烦助教了 <(_ _)>
稍微 test 了一下, checksum 应该没什麽问题才是.
印出了一点讯息, 觉得会不会是我那样设定NAT有问题?
我实际上的实验是这样.
VM1: 192.168.0.1/24
VM2: 192.168.0.2/24 172.16.0.1/24
VM3: 172.16.0.2/24
令 192.168.0.2(VM2) 为 VM1 之 default router.
调整 VM3 的 routing table, 只有 172.16.0/24 的内网
然後我在 VM2 上设定
NAT:
MASQUERADE all -- 192.168.0.0/24 anywhere
FILTER:
ACCEPT icmp -- 192.168.0.0/24 anywhere
DROP all -- 192.168.0.0/24 anywhere
并将 VM2 的 ipv4/ip_forward 打开
我将外部 proxy 放在 VM3, 将连线导向 VM3 的 sshd.
内部 proxy 放在 VM1 开在 1201 port.
接着我在 VM1 用 ssh -p 1201 localhost
问题点在於, 只有刚开始的讯息(建立连线的握手)能够顺利传输.
我後来把 revcfrom 拿到的 sockaddr 印出来, 发现一件很诡异的事情,
最刚开始的封包, 来源 ip 很正常的是 172.16.0.1 ,
可是後来的封包, 来源 ip 就变回了 192.168.0.1 .
VM2 的 NAT 并没有好好的把封包的 IP 给换掉 @@||
不知道助教有何见解吗 QAO?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.192.106.189
1F:→ coquelicot:会出问题应该只有在 sum 溢位, 可是我封包长度<200 01/01 12:54
2F:推 simonxander:这个看起来没错,你可以装 wireshark 来看看进出的封 01/01 13:08
3F:推 simonxander:包,他也会写说 checksum 有没有算对 01/01 13:08
4F:推 simonxander:记得要用root 权限执行 ex: sudo wireshark 01/01 13:08
5F:→ coquelicot:我觉得貌似是 NAT 设定的问题 01/01 16:16
※ 编辑: coquelicot 来自: 123.192.106.189 (01/01 16:30)